|
Packit Service |
1d8f1c |
/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
|
|
Packit Service |
1d8f1c |
/* vim:set et sts=4: */
|
|
Packit Service |
1d8f1c |
/* ibus - The Input Bus
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2008-2013 Peng Huang <shawn.p.huang@gmail.com>
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2018 Takao Fujiwara <takao.fujiwara1@gmail.com>
|
|
Packit Service |
1d8f1c |
* Copyright (C) 2008-2018 Red Hat, Inc.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* This library is free software; you can redistribute it and/or
|
|
Packit Service |
1d8f1c |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
1d8f1c |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
1d8f1c |
* version 2.1 of the License, or (at your option) any later version.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* This library is distributed in the hope that it will be useful,
|
|
Packit Service |
1d8f1c |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
1d8f1c |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
1d8f1c |
* Lesser General Public License for more details.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
1d8f1c |
* License along with this library; if not, write to the Free Software
|
|
Packit Service |
1d8f1c |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
|
|
Packit Service |
1d8f1c |
* USA
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
#include <stdarg.h>
|
|
Packit Service |
1d8f1c |
#include <string.h>
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#include "ibusaccelgroup.h"
|
|
Packit Service |
1d8f1c |
#include "ibusengine.h"
|
|
Packit Service |
1d8f1c |
#include "ibuskeysyms.h"
|
|
Packit Service |
1d8f1c |
#include "ibusmarshalers.h"
|
|
Packit Service |
1d8f1c |
#include "ibusinternal.h"
|
|
Packit Service |
1d8f1c |
#include "ibusshare.h"
|
|
Packit Service |
1d8f1c |
#include "ibusxevent.h"
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#define IBUS_ENGINE_GET_PRIVATE(o) \
|
|
Packit Service |
1d8f1c |
(G_TYPE_INSTANCE_GET_PRIVATE ((o), IBUS_TYPE_ENGINE, IBusEnginePrivate))
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
enum {
|
|
Packit Service |
1d8f1c |
PROCESS_KEY_EVENT,
|
|
Packit Service |
1d8f1c |
FOCUS_IN,
|
|
Packit Service |
1d8f1c |
FOCUS_OUT,
|
|
Packit Service |
1d8f1c |
RESET,
|
|
Packit Service |
1d8f1c |
ENABLE,
|
|
Packit Service |
1d8f1c |
DISABLE,
|
|
Packit Service |
1d8f1c |
SET_CURSOR_LOCATION,
|
|
Packit Service |
1d8f1c |
SET_CAPABILITIES,
|
|
Packit Service |
1d8f1c |
PAGE_UP,
|
|
Packit Service |
1d8f1c |
PAGE_DOWN,
|
|
Packit Service |
1d8f1c |
CURSOR_UP,
|
|
Packit Service |
1d8f1c |
CURSOR_DOWN,
|
|
Packit Service |
1d8f1c |
PROPERTY_ACTIVATE,
|
|
Packit Service |
1d8f1c |
PROPERTY_SHOW,
|
|
Packit Service |
1d8f1c |
PROPERTY_HIDE,
|
|
Packit Service |
1d8f1c |
CANDIDATE_CLICKED,
|
|
Packit Service |
1d8f1c |
SET_SURROUNDING_TEXT,
|
|
Packit Service |
1d8f1c |
PROCESS_HAND_WRITING_EVENT,
|
|
Packit Service |
1d8f1c |
CANCEL_HAND_WRITING,
|
|
Packit Service |
1d8f1c |
SET_CONTENT_TYPE,
|
|
Packit Service |
1d8f1c |
LAST_SIGNAL,
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
enum {
|
|
Packit Service |
1d8f1c |
PROP_0,
|
|
Packit Service |
1d8f1c |
PROP_ENGINE_NAME,
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* IBusEnginePriv */
|
|
Packit Service |
1d8f1c |
struct _IBusEnginePrivate {
|
|
Packit Service |
1d8f1c |
gchar *engine_name;
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* cached surrounding text (see also IBusInputContextPrivate and
|
|
Packit Service |
1d8f1c |
BusEngineProxy) */
|
|
Packit Service |
1d8f1c |
IBusText *surrounding_text;
|
|
Packit Service |
1d8f1c |
guint surrounding_cursor_pos;
|
|
Packit Service |
1d8f1c |
guint selection_anchor_pos;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* cached content-type */
|
|
Packit Service |
1d8f1c |
guint content_purpose;
|
|
Packit Service |
1d8f1c |
guint content_hints;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GHashTable *extension_keybindings;
|
|
Packit Service |
1d8f1c |
gboolean enable_extension;
|
|
Packit Service |
1d8f1c |
gchar *current_extension_name;
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static guint engine_signals[LAST_SIGNAL] = { 0 };
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static IBusText *text_empty;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* functions prototype */
|
|
Packit Service |
1d8f1c |
static void ibus_engine_destroy (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_set_property (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint prop_id,
|
|
Packit Service |
1d8f1c |
const GValue *value,
|
|
Packit Service |
1d8f1c |
GParamSpec *pspec);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_get_property (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint prop_id,
|
|
Packit Service |
1d8f1c |
GValue *value,
|
|
Packit Service |
1d8f1c |
GParamSpec *pspec);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_service_method_call
|
|
Packit Service |
1d8f1c |
(IBusService *service,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *sender,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
const gchar *interface_name,
|
|
Packit Service |
1d8f1c |
const gchar *method_name,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
GDBusMethodInvocation
|
|
Packit Service |
1d8f1c |
*invocation);
|
|
Packit Service |
1d8f1c |
static GVariant *ibus_engine_service_get_property
|
|
Packit Service |
1d8f1c |
(IBusService *service,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *sender,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
const gchar *interface_name,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
GError **error);
|
|
Packit Service |
1d8f1c |
static gboolean ibus_engine_service_set_property
|
|
Packit Service |
1d8f1c |
(IBusService *service,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *sender,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
const gchar *interface_name,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
GVariant *value,
|
|
Packit Service |
1d8f1c |
GError **error);
|
|
Packit Service |
1d8f1c |
static gboolean ibus_engine_process_key_event
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint keyval,
|
|
Packit Service |
1d8f1c |
guint keycode,
|
|
Packit Service |
1d8f1c |
guint state);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_focus_in (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_focus_out (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_reset (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_enable (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_disable (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_set_cursor_location
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
gint x,
|
|
Packit Service |
1d8f1c |
gint y,
|
|
Packit Service |
1d8f1c |
gint w,
|
|
Packit Service |
1d8f1c |
gint h);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_set_capabilities
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint caps);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_page_up (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_page_down (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_cursor_up (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_cursor_down (IBusEngine *engine);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_candidate_clicked
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint index,
|
|
Packit Service |
1d8f1c |
guint button,
|
|
Packit Service |
1d8f1c |
guint state);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_property_activate
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *prop_name,
|
|
Packit Service |
1d8f1c |
guint prop_state);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_property_show (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *prop_name);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_property_hide (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *prop_name);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_set_surrounding_text
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusText *text,
|
|
Packit Service |
1d8f1c |
guint cursor_pos,
|
|
Packit Service |
1d8f1c |
guint anchor_pos);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_process_hand_writing_event
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gdouble *coordinates,
|
|
Packit Service |
1d8f1c |
guint coordinates_len);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_cancel_hand_writing
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint n_strokes);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_set_content_type
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint purpose,
|
|
Packit Service |
1d8f1c |
guint hints);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_emit_signal (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *signal_name,
|
|
Packit Service |
1d8f1c |
GVariant *parameters);
|
|
Packit Service |
1d8f1c |
static void ibus_engine_dbus_property_changed
|
|
Packit Service |
1d8f1c |
(IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
GVariant *value);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
G_DEFINE_TYPE (IBusEngine, ibus_engine, IBUS_TYPE_SERVICE)
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static const gchar introspection_xml[] =
|
|
Packit Service |
1d8f1c |
"<node>"
|
|
Packit Service |
1d8f1c |
" <interface name='org.freedesktop.IBus.Engine'>"
|
|
Packit Service |
1d8f1c |
/* FIXME methods */
|
|
Packit Service |
1d8f1c |
" <method name='ProcessKeyEvent'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='keyval' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='keycode' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='state' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='out' type='b' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='SetCursorLocation'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='i' name='x' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='i' name='y' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='i' name='w' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='i' name='h' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='ProcessHandWritingEvent'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='ad' name='coordinates' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='CancelHandWriting'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='n_strokes' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='SetCapabilities'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='caps' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='PropertyActivate'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='s' name='name' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='state' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='PropertyShow'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='s' name='name' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='PropertyHide'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='s' name='name' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='CandidateClicked'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='index' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='button' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='state' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='FocusIn' />"
|
|
Packit Service |
1d8f1c |
" <method name='FocusOut' />"
|
|
Packit Service |
1d8f1c |
" <method name='Reset' />"
|
|
Packit Service |
1d8f1c |
" <method name='Enable' />"
|
|
Packit Service |
1d8f1c |
" <method name='Disable' />"
|
|
Packit Service |
1d8f1c |
" <method name='PageUp' />"
|
|
Packit Service |
1d8f1c |
" <method name='PageDown' />"
|
|
Packit Service |
1d8f1c |
" <method name='CursorUp' />"
|
|
Packit Service |
1d8f1c |
" <method name='CursorDown' />"
|
|
Packit Service |
1d8f1c |
" <method name='SetSurroundingText'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='v' name='text' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='cursor_pos' />"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='u' name='anchor_pos' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='PanelExtensionReceived'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='v' name='event' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
" <method name='PanelExtensionRegisterKeys'>"
|
|
Packit Service |
1d8f1c |
" <arg direction='in' type='v' name='data' />"
|
|
Packit Service |
1d8f1c |
" </method>"
|
|
Packit Service |
1d8f1c |
/* FIXME signals */
|
|
Packit Service |
1d8f1c |
" <signal name='CommitText'>"
|
|
Packit Service |
1d8f1c |
" <arg type='v' name='text' />"
|
|
Packit Service |
1d8f1c |
" </signal>"
|
|
Packit Service |
1d8f1c |
" <signal name='UpdatePreeditText'>"
|
|
Packit Service |
1d8f1c |
" <arg type='v' name='text' />"
|
|
Packit Service |
1d8f1c |
" <arg type='u' name='cursor_pos' />"
|
|
Packit Service |
1d8f1c |
" <arg type='b' name='visible' />"
|
|
Packit Service |
1d8f1c |
" <arg type='u' name='mode' />"
|
|
Packit Service |
1d8f1c |
" </signal>"
|
|
Packit Service |
1d8f1c |
" <signal name='UpdateAuxiliaryText'>"
|
|
Packit Service |
1d8f1c |
" <arg type='v' name='text' />"
|
|
Packit Service |
1d8f1c |
" <arg type='b' name='visible' />"
|
|
Packit Service |
1d8f1c |
" </signal>"
|
|
Packit Service |
1d8f1c |
" <signal name='UpdateLookupTable'>"
|
|
Packit Service |
1d8f1c |
" <arg type='v' name='table' />"
|
|
Packit Service |
1d8f1c |
" <arg type='b' name='visible' />"
|
|
Packit Service |
1d8f1c |
" </signal>"
|
|
Packit Service |
1d8f1c |
" <signal name='RegisterProperties'>"
|
|
Packit Service |
1d8f1c |
" <arg type='v' name='props' />"
|
|
Packit Service |
1d8f1c |
" </signal>"
|
|
Packit Service |
1d8f1c |
" <signal name='UpdateProperty'>"
|
|
Packit Service |
1d8f1c |
" <arg type='v' name='prop' />"
|
|
Packit Service |
1d8f1c |
" </signal>"
|
|
Packit Service |
1d8f1c |
" <signal name='ForwardKeyEvent'>"
|
|
Packit Service |
1d8f1c |
" <arg type='u' name='keyval' />"
|
|
Packit Service |
1d8f1c |
" <arg type='u' name='keycode' />"
|
|
Packit Service |
1d8f1c |
" <arg type='u' name='state' />"
|
|
Packit Service |
1d8f1c |
" </signal>"
|
|
Packit Service |
1d8f1c |
" <signal name='PanelExtension'>"
|
|
Packit Service |
1d8f1c |
" <arg type='v' name='data' />"
|
|
Packit Service |
1d8f1c |
" </signal>"
|
|
Packit Service |
1d8f1c |
/* FIXME properties */
|
|
Packit Service |
1d8f1c |
" <property name='ContentType' type='(uu)' access='write' />"
|
|
Packit Service |
1d8f1c |
" </interface>"
|
|
Packit Service |
1d8f1c |
"</node>";
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static const guint IBUS_MODIFIER_FILTER =
|
|
Packit Service |
1d8f1c |
IBUS_MODIFIER_MASK & ~(
|
|
Packit Service |
1d8f1c |
IBUS_LOCK_MASK | /* Caps Lock */
|
|
Packit Service |
1d8f1c |
IBUS_MOD2_MASK | /* Num Lock */
|
|
Packit Service |
1d8f1c |
IBUS_BUTTON1_MASK |
|
|
Packit Service |
1d8f1c |
IBUS_BUTTON2_MASK |
|
|
Packit Service |
1d8f1c |
IBUS_BUTTON3_MASK |
|
|
Packit Service |
1d8f1c |
IBUS_BUTTON4_MASK |
|
|
Packit Service |
1d8f1c |
IBUS_BUTTON5_MASK |
|
|
Packit Service |
1d8f1c |
IBUS_SUPER_MASK |
|
|
Packit Service |
1d8f1c |
IBUS_HYPER_MASK |
|
|
Packit Service |
1d8f1c |
IBUS_META_MASK);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_class_init (IBusEngineClass *class)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
GObjectClass *gobject_class = G_OBJECT_CLASS (class);
|
|
Packit Service |
1d8f1c |
IBusObjectClass *ibus_object_class = IBUS_OBJECT_CLASS (class);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gobject_class->set_property =
|
|
Packit Service |
1d8f1c |
(GObjectSetPropertyFunc) ibus_engine_set_property;
|
|
Packit Service |
1d8f1c |
gobject_class->get_property =
|
|
Packit Service |
1d8f1c |
(GObjectGetPropertyFunc) ibus_engine_get_property;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_object_class->destroy = (IBusObjectDestroyFunc) ibus_engine_destroy;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_CLASS (class)->service_method_call =
|
|
Packit Service |
1d8f1c |
ibus_engine_service_method_call;
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_CLASS (class)->service_get_property =
|
|
Packit Service |
1d8f1c |
ibus_engine_service_get_property;
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_CLASS (class)->service_set_property =
|
|
Packit Service |
1d8f1c |
ibus_engine_service_set_property;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_service_class_add_interfaces (IBUS_SERVICE_CLASS (class),
|
|
Packit Service |
1d8f1c |
introspection_xml);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
class->process_key_event = ibus_engine_process_key_event;
|
|
Packit Service |
1d8f1c |
class->focus_in = ibus_engine_focus_in;
|
|
Packit Service |
1d8f1c |
class->focus_out = ibus_engine_focus_out;
|
|
Packit Service |
1d8f1c |
class->reset = ibus_engine_reset;
|
|
Packit Service |
1d8f1c |
class->enable = ibus_engine_enable;
|
|
Packit Service |
1d8f1c |
class->disable = ibus_engine_disable;
|
|
Packit Service |
1d8f1c |
class->page_up = ibus_engine_page_up;
|
|
Packit Service |
1d8f1c |
class->page_down = ibus_engine_page_down;
|
|
Packit Service |
1d8f1c |
class->cursor_up = ibus_engine_cursor_up;
|
|
Packit Service |
1d8f1c |
class->cursor_down = ibus_engine_cursor_down;
|
|
Packit Service |
1d8f1c |
class->candidate_clicked = ibus_engine_candidate_clicked;
|
|
Packit Service |
1d8f1c |
class->property_activate = ibus_engine_property_activate;
|
|
Packit Service |
1d8f1c |
class->property_show = ibus_engine_property_show;
|
|
Packit Service |
1d8f1c |
class->property_hide = ibus_engine_property_hide;
|
|
Packit Service |
1d8f1c |
class->set_cursor_location = ibus_engine_set_cursor_location;
|
|
Packit Service |
1d8f1c |
class->set_capabilities = ibus_engine_set_capabilities;
|
|
Packit Service |
1d8f1c |
class->set_surrounding_text = ibus_engine_set_surrounding_text;
|
|
Packit Service |
1d8f1c |
class->process_hand_writing_event
|
|
Packit Service |
1d8f1c |
= ibus_engine_process_hand_writing_event;
|
|
Packit Service |
1d8f1c |
class->cancel_hand_writing = ibus_engine_cancel_hand_writing;
|
|
Packit Service |
1d8f1c |
class->set_content_type = ibus_engine_set_content_type;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* install properties */
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine:name:
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Name of this IBusEngine.
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
g_object_class_install_property (gobject_class,
|
|
Packit Service |
1d8f1c |
PROP_ENGINE_NAME,
|
|
Packit Service |
1d8f1c |
g_param_spec_string ("engine-name",
|
|
Packit Service |
1d8f1c |
"engine name",
|
|
Packit Service |
1d8f1c |
"engine name",
|
|
Packit Service |
1d8f1c |
"noname",
|
|
Packit Service |
1d8f1c |
G_PARAM_READWRITE |
|
|
Packit Service |
1d8f1c |
G_PARAM_CONSTRUCT_ONLY |
|
|
Packit Service |
1d8f1c |
G_PARAM_STATIC_STRINGS));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* install signals */
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::process-key-event:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @keyval: Key symbol of the key press.
|
|
Packit Service |
1d8f1c |
* @keycode: KeyCode of the key press.
|
|
Packit Service |
1d8f1c |
* @state: Key modifier flags.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when a key event is received.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::process_key_event
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
* Both the key symbol and keycode are passed to the member function.
|
|
Packit Service |
1d8f1c |
* See ibus_input_context_process_key_event() for further explanation of
|
|
Packit Service |
1d8f1c |
* key symbol, keycode and which to use.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Returns: %TRUE for successfully process the key; %FALSE otherwise.
|
|
Packit Service |
1d8f1c |
* See also: ibus_input_context_process_key_event().
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[PROCESS_KEY_EVENT] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("process-key-event"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, process_key_event),
|
|
Packit Service |
1d8f1c |
g_signal_accumulator_true_handled, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_BOOLEAN__UINT_UINT_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_BOOLEAN,
|
|
Packit Service |
1d8f1c |
3,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::focus-in:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the client application get the focus.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::focus_in
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_input_context_focus_in()
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[FOCUS_IN] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("focus-in"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, focus_in),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::focus-out:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the client application lost the focus.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::focus_out
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_input_context_focus_out()
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[FOCUS_OUT] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("focus-out"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, focus_out),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::reset:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the IME is reset.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::reset
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_input_context_reset().
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[RESET] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("reset"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, reset),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::enable:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the IME is enabled.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::enable
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_bus_set_global_engine().
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[ENABLE] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("enable"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, enable),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::disable:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the IME is disabled.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::disable
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_bus_set_global_engine().
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[DISABLE] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("disable"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, disable),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::set-cursor-location:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @x: X coordinate of the cursor.
|
|
Packit Service |
1d8f1c |
* @y: Y coordinate of the cursor.
|
|
Packit Service |
1d8f1c |
* @w: Width of the cursor.
|
|
Packit Service |
1d8f1c |
* @h: Height of the cursor.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the location of IME is set.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::set_cursor_location
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_input_context_set_cursor_location().
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[SET_CURSOR_LOCATION] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("set-cursor-location"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, set_cursor_location),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__INT_INT_INT_INT,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
4,
|
|
Packit Service |
1d8f1c |
G_TYPE_INT,
|
|
Packit Service |
1d8f1c |
G_TYPE_INT,
|
|
Packit Service |
1d8f1c |
G_TYPE_INT,
|
|
Packit Service |
1d8f1c |
G_TYPE_INT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::set-capabilities:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @caps: Capabilities flags of IBusEngine, see #IBusCapabilite
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the client application capabilities is set.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::set_capabilities
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* See also: ibus_input_context_set_capabilities().
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[SET_CAPABILITIES] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("set-capabilities"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, set_capabilities),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
1,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::page-up:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the page-up button is pressed.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::page_up
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[PAGE_UP] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("page-up"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, page_up),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::page-down:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the page-down button is pressed.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::page_down
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[PAGE_DOWN] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("page-down"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, page_down),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::cursor-up:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the up cursor button is pressed.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::cursor_up
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[CURSOR_UP] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("cursor-up"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, cursor_up),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::cursor-down:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the down cursor button is pressed.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::cursor_down
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[CURSOR_DOWN] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("cursor-down"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, cursor_down),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__VOID,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::candidate-clicked:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @index: Index of candidate be clicked.
|
|
Packit Service |
1d8f1c |
* @button: Mouse button.
|
|
Packit Service |
1d8f1c |
* @state: Keyboard state.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when candidate on lookup table is clicked.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::candidate_clicked
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[CANDIDATE_CLICKED] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("candidate-clicked"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, candidate_clicked),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__UINT_UINT_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
3,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::property-activate:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @name: Property name.
|
|
Packit Service |
1d8f1c |
* @state: Property state.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when a property is activated or change changed.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::property_activate
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[PROPERTY_ACTIVATE] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("property-activate"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, property_activate),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__STRING_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
2,
|
|
Packit Service |
1d8f1c |
G_TYPE_STRING,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::property-show:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @name: Property name.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when a property is shown.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::property_side
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[PROPERTY_SHOW] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("property-show"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, property_show),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__STRING,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
1,
|
|
Packit Service |
1d8f1c |
G_TYPE_STRING);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::property-hide:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @name: Property name.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when a property is hidden.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::property_hide
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[PROPERTY_HIDE] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("property-hide"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, property_hide),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__STRING,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
1,
|
|
Packit Service |
1d8f1c |
G_TYPE_STRING);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::process-hand-writing-event:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @coordinates: An array of double (0.0 to 1.0) which represents a stroke (i.e. [x1, y1, x2, y2, x3, y3, ...]).
|
|
Packit Service |
1d8f1c |
* @coordinates_len: The number of elements in the array.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when a hand writing operation is cancelled.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::cancel_hand_writing
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[PROCESS_HAND_WRITING_EVENT] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("process-hand-writing-event"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, process_hand_writing_event),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__POINTER_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
2,
|
|
Packit Service |
1d8f1c |
G_TYPE_POINTER,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::cancel-hand-writing:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @n_strokes: The number of strokes to be removed. 0 means "remove all".
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when a hand writing operation is cancelled.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::cancel_hand_writing
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[CANCEL_HAND_WRITING] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("cancel-hand-writing"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, cancel_hand_writing),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
1,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::set-surrounding-text:
|
|
Packit Service |
1d8f1c |
* @engine: An IBusEngine.
|
|
Packit Service |
1d8f1c |
* @text: The surrounding text.
|
|
Packit Service |
1d8f1c |
* @cursor_pos: The cursor position on surrounding text.
|
|
Packit Service |
1d8f1c |
* @anchor_pos: The anchor position on selection area.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when a surrounding text is set.
|
|
Packit Service |
1d8f1c |
* Implement the member function IBusEngineClass::set_surrounding_text
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
* If anchor_pos equals to cursor_pos, it means "there are no selection"
|
|
Packit Service |
1d8f1c |
* or "does not support selection retrival".
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[SET_SURROUNDING_TEXT] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("set-surrounding-text"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, set_surrounding_text),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__OBJECT_UINT_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
3,
|
|
Packit Service |
1d8f1c |
G_TYPE_OBJECT,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/**
|
|
Packit Service |
1d8f1c |
* IBusEngine::set-content-type:
|
|
Packit Service |
1d8f1c |
* @engine: An #IBusEngine.
|
|
Packit Service |
1d8f1c |
* @purpose: Primary purpose of the input context, as an #IBusInputPurpose.
|
|
Packit Service |
1d8f1c |
* @hints: Hints that augment @purpose, as an #IBusInputHints.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* Emitted when the client application content-type (primary
|
|
Packit Service |
1d8f1c |
* purpose and hints) is set. The engine could change the
|
|
Packit Service |
1d8f1c |
* behavior according to the content-type. Implement the member
|
|
Packit Service |
1d8f1c |
* function IBusEngineClass::set_content_type
|
|
Packit Service |
1d8f1c |
* in extended class to receive this signal.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* For example, if the client application wants to restrict input
|
|
Packit Service |
1d8f1c |
* to numbers, this signal will be emitted with @purpose set to
|
|
Packit Service |
1d8f1c |
* #IBUS_INPUT_PURPOSE_NUMBER, so the engine can switch the input
|
|
Packit Service |
1d8f1c |
* mode to latin.
|
|
Packit Service |
1d8f1c |
*
|
|
Packit Service |
1d8f1c |
* <note><para>Argument @user_data is ignored in this
|
|
Packit Service |
1d8f1c |
* function.</para></note>
|
|
Packit Service |
1d8f1c |
*/
|
|
Packit Service |
1d8f1c |
engine_signals[SET_CONTENT_TYPE] =
|
|
Packit Service |
1d8f1c |
g_signal_new (I_("set-content-type"),
|
|
Packit Service |
1d8f1c |
G_TYPE_FROM_CLASS (gobject_class),
|
|
Packit Service |
1d8f1c |
G_SIGNAL_RUN_LAST,
|
|
Packit Service |
1d8f1c |
G_STRUCT_OFFSET (IBusEngineClass, set_content_type),
|
|
Packit Service |
1d8f1c |
NULL, NULL,
|
|
Packit Service |
1d8f1c |
_ibus_marshal_VOID__UINT_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_NONE,
|
|
Packit Service |
1d8f1c |
2,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT,
|
|
Packit Service |
1d8f1c |
G_TYPE_UINT);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_type_class_add_private (class, sizeof (IBusEnginePrivate));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
text_empty = ibus_text_new_from_static_string ("");
|
|
Packit Service |
1d8f1c |
g_object_ref_sink (text_empty);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_init (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEnginePrivate *priv;
|
|
Packit Service |
1d8f1c |
engine->priv = priv = IBUS_ENGINE_GET_PRIVATE (engine);
|
|
Packit Service |
1d8f1c |
priv->surrounding_text = g_object_ref_sink (text_empty);
|
|
Packit Service |
1d8f1c |
priv->extension_keybindings = g_hash_table_new_full (
|
|
Packit Service |
1d8f1c |
g_str_hash,
|
|
Packit Service |
1d8f1c |
g_str_equal,
|
|
Packit Service |
1d8f1c |
g_free,
|
|
Packit Service |
1d8f1c |
g_free);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_destroy (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEnginePrivate *priv = engine->priv;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_clear_pointer (&priv->engine_name, g_free);
|
|
Packit Service |
1d8f1c |
g_clear_pointer (&priv->current_extension_name, g_free);
|
|
Packit Service |
1d8f1c |
if (priv->surrounding_text)
|
|
Packit Service |
1d8f1c |
g_clear_object (&priv->surrounding_text);
|
|
Packit Service |
1d8f1c |
if (priv->extension_keybindings)
|
|
Packit Service |
1d8f1c |
g_clear_pointer (&priv->extension_keybindings, g_hash_table_destroy);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBUS_OBJECT_CLASS(ibus_engine_parent_class)->destroy (IBUS_OBJECT (engine));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_set_property (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint prop_id,
|
|
Packit Service |
1d8f1c |
const GValue *value,
|
|
Packit Service |
1d8f1c |
GParamSpec *pspec)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
switch (prop_id) {
|
|
Packit Service |
1d8f1c |
case PROP_ENGINE_NAME:
|
|
Packit Service |
1d8f1c |
engine->priv->engine_name = g_value_dup_string (value);
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
default:
|
|
Packit Service |
1d8f1c |
G_OBJECT_WARN_INVALID_PROPERTY_ID (engine, prop_id, pspec);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_get_property (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint prop_id,
|
|
Packit Service |
1d8f1c |
GValue *value,
|
|
Packit Service |
1d8f1c |
GParamSpec *pspec)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
switch (prop_id) {
|
|
Packit Service |
1d8f1c |
case PROP_ENGINE_NAME:
|
|
Packit Service |
1d8f1c |
g_value_set_string (value, engine->priv->engine_name);
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
default:
|
|
Packit Service |
1d8f1c |
G_OBJECT_WARN_INVALID_PROPERTY_ID (engine, prop_id, pspec);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_panel_extension (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEnginePrivate *priv;
|
|
Packit Service |
1d8f1c |
IBusExtensionEvent *event;
|
|
Packit Service |
1d8f1c |
GVariant *data;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
g_assert (name);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
priv = engine->priv;
|
|
Packit Service |
1d8f1c |
if (!g_strcmp0 (name, priv->current_extension_name))
|
|
Packit Service |
1d8f1c |
priv->enable_extension = !priv->enable_extension;
|
|
Packit Service |
1d8f1c |
else
|
|
Packit Service |
1d8f1c |
priv->enable_extension = TRUE;
|
|
Packit Service |
1d8f1c |
if (priv->enable_extension) {
|
|
Packit Service |
1d8f1c |
g_free (priv->current_extension_name);
|
|
Packit Service |
1d8f1c |
priv->current_extension_name = g_strdup (name);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
event = ibus_extension_event_new (
|
|
Packit Service |
1d8f1c |
"name", name,
|
|
Packit Service |
1d8f1c |
"is-enabled", priv->enable_extension,
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_EXTENSION_EVENT (event));
|
|
Packit Service |
1d8f1c |
data = ibus_serializable_serialize_object (
|
|
Packit Service |
1d8f1c |
IBUS_SERIALIZABLE (event));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_assert (data != NULL);
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"PanelExtension",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(v)", data));
|
|
Packit Service |
1d8f1c |
g_object_unref (event);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
ibus_engine_filter_key_event (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint keyval,
|
|
Packit Service |
1d8f1c |
guint keycode,
|
|
Packit Service |
1d8f1c |
guint state)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEnginePrivate *priv;
|
|
Packit Service |
1d8f1c |
GList *names, *n;
|
|
Packit Service |
1d8f1c |
IBusProcessKeyEventData *keys;
|
|
Packit Service |
1d8f1c |
guint modifiers;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if ((state & IBUS_RELEASE_MASK) != 0)
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_ENGINE (engine), FALSE);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
priv = engine->priv;
|
|
Packit Service |
1d8f1c |
modifiers = state & IBUS_MODIFIER_FILTER;
|
|
Packit Service |
1d8f1c |
if (keyval >= IBUS_KEY_A && keyval <= IBUS_KEY_Z &&
|
|
Packit Service |
1d8f1c |
(modifiers & IBUS_SHIFT_MASK) != 0) {
|
|
Packit Service |
1d8f1c |
keyval = keyval - IBUS_KEY_A + IBUS_KEY_a;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
names = g_hash_table_get_keys (priv->extension_keybindings);
|
|
Packit Service |
1d8f1c |
if (!names)
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
for (n = names; n; n = n->next) {
|
|
Packit Service |
1d8f1c |
const gchar *name = (const gchar *)n->data;
|
|
Packit Service |
1d8f1c |
keys = g_hash_table_lookup (priv->extension_keybindings, name);
|
|
Packit Service |
1d8f1c |
for (; keys; keys++) {
|
|
Packit Service |
1d8f1c |
if (keys->keyval == 0 && keys->keycode == 0 && keys->state == 0)
|
|
Packit Service |
1d8f1c |
break;
|
|
Packit Service |
1d8f1c |
if (keys->keyval == keyval &&
|
|
Packit Service |
1d8f1c |
keys->state == modifiers &&
|
|
Packit Service |
1d8f1c |
(keys->keycode == 0 || keys->keycode == keycode)) {
|
|
Packit Service |
1d8f1c |
ibus_engine_panel_extension (engine, name);
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_list_free (names);
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
ibus_engine_service_authorized_method (IBusService *service,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
if (ibus_service_get_connection (service) == connection)
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_service_panel_extension_register_keys (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
GDBusMethodInvocation
|
|
Packit Service |
1d8f1c |
*invocation)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEnginePrivate *priv = engine->priv;
|
|
Packit Service |
1d8f1c |
GVariant *v1 = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *v2 = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *v3 = NULL;
|
|
Packit Service |
1d8f1c |
GVariant *vkeys = NULL;
|
|
Packit Service |
1d8f1c |
GVariantIter *iter1 = NULL;
|
|
Packit Service |
1d8f1c |
GVariantIter *iter2 = NULL;
|
|
Packit Service |
1d8f1c |
const gchar *name = NULL;
|
|
Packit Service |
1d8f1c |
guint failure_id = 0;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(v)", &v1;;
|
|
Packit Service |
1d8f1c |
if (v1)
|
|
Packit Service |
1d8f1c |
g_variant_get (v1, "(v)", &v2;;
|
|
Packit Service |
1d8f1c |
else
|
|
Packit Service |
1d8f1c |
failure_id = 1;
|
|
Packit Service |
1d8f1c |
if (v2)
|
|
Packit Service |
1d8f1c |
g_variant_get (v2, "a{sv}", &iter1);
|
|
Packit Service |
1d8f1c |
else
|
|
Packit Service |
1d8f1c |
failure_id = 2;
|
|
Packit Service |
1d8f1c |
if (iter1) {
|
|
Packit Service |
1d8f1c |
while (g_variant_iter_loop (iter1, "{&sv}", &name, &vkeys)) {
|
|
Packit Service |
1d8f1c |
if (vkeys)
|
|
Packit Service |
1d8f1c |
g_variant_get (vkeys, "av", &iter2);
|
|
Packit Service |
1d8f1c |
if (name && iter2) {
|
|
Packit Service |
1d8f1c |
IBusProcessKeyEventData *keys = NULL;
|
|
Packit Service |
1d8f1c |
gint num = 0;
|
|
Packit Service |
1d8f1c |
while (g_variant_iter_loop (iter2, "v", &v3)) {
|
|
Packit Service |
1d8f1c |
if (v3) {
|
|
Packit Service |
1d8f1c |
guint keyval = 0;
|
|
Packit Service |
1d8f1c |
guint keycode = 0;
|
|
Packit Service |
1d8f1c |
guint state = 0;
|
|
Packit Service |
1d8f1c |
g_variant_get (v3, "(iii)",
|
|
Packit Service |
1d8f1c |
&keyval, &keycode, &state);
|
|
Packit Service |
1d8f1c |
if (!keys)
|
|
Packit Service |
1d8f1c |
keys = g_new0 (IBusProcessKeyEventData, 2);
|
|
Packit Service |
1d8f1c |
else
|
|
Packit Service |
1d8f1c |
keys = g_renew (IBusProcessKeyEventData,
|
|
Packit Service |
1d8f1c |
keys,
|
|
Packit Service |
1d8f1c |
num + 2);
|
|
Packit Service |
1d8f1c |
keys[num].keyval = keyval;
|
|
Packit Service |
1d8f1c |
keys[num].keycode = keycode;
|
|
Packit Service |
1d8f1c |
keys[num].state = state;
|
|
Packit Service |
1d8f1c |
keys[num + 1].keyval = 0;
|
|
Packit Service |
1d8f1c |
keys[num + 1].keycode = 0;
|
|
Packit Service |
1d8f1c |
keys[num + 1].state = 0;
|
|
Packit Service |
1d8f1c |
g_clear_pointer (&v3, g_variant_unref);
|
|
Packit Service |
1d8f1c |
num++;
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
failure_id = 5;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
if (num > 0) {
|
|
Packit Service |
1d8f1c |
g_hash_table_replace (priv->extension_keybindings,
|
|
Packit Service |
1d8f1c |
g_strdup (name),
|
|
Packit Service |
1d8f1c |
keys);
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
g_hash_table_remove (priv->extension_keybindings, name);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_clear_pointer (&iter2, g_variant_iter_free);
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
failure_id = 4;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_clear_pointer (&vkeys, g_variant_unref);
|
|
Packit Service |
1d8f1c |
name = NULL;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_variant_iter_free (iter1);
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
failure_id = 3;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
if (failure_id == 0) {
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_error (
|
|
Packit Service |
1d8f1c |
invocation,
|
|
Packit Service |
1d8f1c |
G_DBUS_ERROR,
|
|
Packit Service |
1d8f1c |
G_DBUS_ERROR_FAILED,
|
|
Packit Service |
1d8f1c |
"PanelExtensionRegisterKeys method gives NULL: %d",
|
|
Packit Service |
1d8f1c |
failure_id);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
if (v2)
|
|
Packit Service |
1d8f1c |
g_variant_unref (v2);
|
|
Packit Service |
1d8f1c |
if (v1)
|
|
Packit Service |
1d8f1c |
g_variant_unref (v1);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_service_method_call (IBusService *service,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *sender,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
const gchar *interface_name,
|
|
Packit Service |
1d8f1c |
const gchar *method_name,
|
|
Packit Service |
1d8f1c |
GVariant *parameters,
|
|
Packit Service |
1d8f1c |
GDBusMethodInvocation *invocation)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEngine *engine = IBUS_ENGINE (service);
|
|
Packit Service |
1d8f1c |
IBusEnginePrivate *priv = engine->priv;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (interface_name, IBUS_INTERFACE_ENGINE) != 0) {
|
|
Packit Service |
1d8f1c |
IBUS_SERVICE_CLASS (ibus_engine_parent_class)->
|
|
Packit Service |
1d8f1c |
service_method_call (service,
|
|
Packit Service |
1d8f1c |
connection,
|
|
Packit Service |
1d8f1c |
sender,
|
|
Packit Service |
1d8f1c |
object_path,
|
|
Packit Service |
1d8f1c |
interface_name,
|
|
Packit Service |
1d8f1c |
method_name,
|
|
Packit Service |
1d8f1c |
parameters,
|
|
Packit Service |
1d8f1c |
invocation);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (!ibus_engine_service_authorized_method (service, connection))
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "ProcessKeyEvent") == 0) {
|
|
Packit Service |
1d8f1c |
guint keyval, keycode, state;
|
|
Packit Service |
1d8f1c |
gboolean retval = FALSE;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(uuu)", &keyval, &keycode, &state);
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine,
|
|
Packit Service |
1d8f1c |
engine_signals[PROCESS_KEY_EVENT],
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
keyval,
|
|
Packit Service |
1d8f1c |
keycode,
|
|
Packit Service |
1d8f1c |
state,
|
|
Packit Service |
1d8f1c |
&retval);
|
|
Packit Service |
1d8f1c |
if (!retval) {
|
|
Packit Service |
1d8f1c |
retval = ibus_engine_filter_key_event (engine,
|
|
Packit Service |
1d8f1c |
keyval,
|
|
Packit Service |
1d8f1c |
keycode,
|
|
Packit Service |
1d8f1c |
state);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", retval));
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "PanelExtensionReceived") == 0) {
|
|
Packit Service |
1d8f1c |
GVariant *arg0 = NULL;
|
|
Packit Service |
1d8f1c |
IBusExtensionEvent *event = NULL;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(v)", &arg0);
|
|
Packit Service |
1d8f1c |
if (arg0) {
|
|
Packit Service |
1d8f1c |
event = (IBusExtensionEvent *)ibus_serializable_deserialize_object (
|
|
Packit Service |
1d8f1c |
arg0);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
if (!event) {
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_error (
|
|
Packit Service |
1d8f1c |
invocation,
|
|
Packit Service |
1d8f1c |
G_DBUS_ERROR,
|
|
Packit Service |
1d8f1c |
G_DBUS_ERROR_FAILED,
|
|
Packit Service |
1d8f1c |
"PanelExtensionReceived method gives NULL");
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
priv->enable_extension = ibus_extension_event_is_enabled (event);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "PanelExtensionRegisterKeys") == 0) {
|
|
Packit Service |
1d8f1c |
ibus_engine_service_panel_extension_register_keys (engine,
|
|
Packit Service |
1d8f1c |
parameters,
|
|
Packit Service |
1d8f1c |
invocation);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static const struct {
|
|
Packit Service |
1d8f1c |
gchar *member;
|
|
Packit Service |
1d8f1c |
guint signal_id;
|
|
Packit Service |
1d8f1c |
} no_arg_methods[] = {
|
|
Packit Service |
1d8f1c |
{ "FocusIn", FOCUS_IN },
|
|
Packit Service |
1d8f1c |
{ "FocusOut", FOCUS_OUT },
|
|
Packit Service |
1d8f1c |
{ "Reset", RESET },
|
|
Packit Service |
1d8f1c |
{ "Enable", ENABLE },
|
|
Packit Service |
1d8f1c |
{ "Disable", DISABLE },
|
|
Packit Service |
1d8f1c |
{ "PageUp", PAGE_UP },
|
|
Packit Service |
1d8f1c |
{ "PageDown", PAGE_DOWN },
|
|
Packit Service |
1d8f1c |
{ "CursorUp", CURSOR_UP },
|
|
Packit Service |
1d8f1c |
{ "CursorDown", CURSOR_DOWN },
|
|
Packit Service |
1d8f1c |
};
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
gint i;
|
|
Packit Service |
1d8f1c |
for (i = 0; i < G_N_ELEMENTS (no_arg_methods); i++) {
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, no_arg_methods[i].member) == 0) {
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine, engine_signals[no_arg_methods[i].signal_id], 0);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "CandidateClicked") == 0) {
|
|
Packit Service |
1d8f1c |
guint index, button, state;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(uuu)", &index, &button, &state);
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine,
|
|
Packit Service |
1d8f1c |
engine_signals[CANDIDATE_CLICKED],
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
index,
|
|
Packit Service |
1d8f1c |
button,
|
|
Packit Service |
1d8f1c |
state);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "PropertyActivate") == 0) {
|
|
Packit Service |
1d8f1c |
gchar *name;
|
|
Packit Service |
1d8f1c |
guint state;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(&su)", &name, &state);
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine,
|
|
Packit Service |
1d8f1c |
engine_signals[PROPERTY_ACTIVATE],
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
name,
|
|
Packit Service |
1d8f1c |
state);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "PropertyShow") == 0) {
|
|
Packit Service |
1d8f1c |
gchar *name;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(&s)", &name);
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine,
|
|
Packit Service |
1d8f1c |
engine_signals[PROPERTY_SHOW],
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
name);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "PropertyHide") == 0) {
|
|
Packit Service |
1d8f1c |
gchar *name;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(&s)", &name);
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine,
|
|
Packit Service |
1d8f1c |
engine_signals[PROPERTY_HIDE],
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
name);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "SetCursorLocation") == 0) {
|
|
Packit Service |
1d8f1c |
gint x, y, w, h;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(iiii)", &x, &y, &w, &h);
|
|
Packit Service |
1d8f1c |
engine->cursor_area.x = x;
|
|
Packit Service |
1d8f1c |
engine->cursor_area.y = y;
|
|
Packit Service |
1d8f1c |
engine->cursor_area.width = w;
|
|
Packit Service |
1d8f1c |
engine->cursor_area.height = h;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine,
|
|
Packit Service |
1d8f1c |
engine_signals[SET_CURSOR_LOCATION],
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
x, y, w, h);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "SetCapabilities") == 0) {
|
|
Packit Service |
1d8f1c |
guint caps;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(u)", &caps);
|
|
Packit Service |
1d8f1c |
engine->client_capabilities = caps;
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine, engine_signals[SET_CAPABILITIES], 0, caps);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "SetSurroundingText") == 0) {
|
|
Packit Service |
1d8f1c |
GVariant *variant = NULL;
|
|
Packit Service |
1d8f1c |
IBusText *text;
|
|
Packit Service |
1d8f1c |
guint cursor_pos;
|
|
Packit Service |
1d8f1c |
guint anchor_pos;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters,
|
|
Packit Service |
1d8f1c |
"(vuu)",
|
|
Packit Service |
1d8f1c |
&variant,
|
|
Packit Service |
1d8f1c |
&cursor_pos,
|
|
Packit Service |
1d8f1c |
&anchor_pos);
|
|
Packit Service |
1d8f1c |
text = IBUS_TEXT (ibus_serializable_deserialize (variant));
|
|
Packit Service |
1d8f1c |
g_variant_unref (variant);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine, engine_signals[SET_SURROUNDING_TEXT],
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
text,
|
|
Packit Service |
1d8f1c |
cursor_pos,
|
|
Packit Service |
1d8f1c |
anchor_pos);
|
|
Packit Service |
1d8f1c |
if (g_object_is_floating (text)) {
|
|
Packit Service |
1d8f1c |
g_object_unref (text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "ProcessHandWritingEvent") == 0) {
|
|
Packit Service |
1d8f1c |
const gdouble *coordinates;
|
|
Packit Service |
1d8f1c |
gsize coordinates_len = 0;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
coordinates = g_variant_get_fixed_array (g_variant_get_child_value (parameters, 0), &coordinates_len, sizeof (gdouble));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (coordinates != NULL);
|
|
Packit Service |
1d8f1c |
g_return_if_fail (coordinates_len >= 4); /* The array should contain at least one line. */
|
|
Packit Service |
1d8f1c |
g_return_if_fail (coordinates_len <= G_MAXUINT); /* to prevent overflow in the cast in g_signal_emit */
|
|
Packit Service |
1d8f1c |
g_return_if_fail ((coordinates_len & 1) == 0);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine, engine_signals[PROCESS_HAND_WRITING_EVENT], 0,
|
|
Packit Service |
1d8f1c |
coordinates, (guint) coordinates_len);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (method_name, "CancelHandWriting") == 0) {
|
|
Packit Service |
1d8f1c |
guint n_strokes = 0;
|
|
Packit Service |
1d8f1c |
g_variant_get (parameters, "(u)", &n_strokes);
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine, engine_signals[CANCEL_HAND_WRITING], 0, n_strokes);
|
|
Packit Service |
1d8f1c |
g_dbus_method_invocation_return_value (invocation, NULL);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* should not be reached */
|
|
Packit Service |
1d8f1c |
g_return_if_reached ();
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static GVariant *
|
|
Packit Service |
1d8f1c |
ibus_engine_service_get_property (IBusService *service,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *sender,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
const gchar *interface_name,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
return IBUS_SERVICE_CLASS (ibus_engine_parent_class)->
|
|
Packit Service |
1d8f1c |
service_get_property (service,
|
|
Packit Service |
1d8f1c |
connection,
|
|
Packit Service |
1d8f1c |
sender,
|
|
Packit Service |
1d8f1c |
object_path,
|
|
Packit Service |
1d8f1c |
interface_name,
|
|
Packit Service |
1d8f1c |
property_name,
|
|
Packit Service |
1d8f1c |
error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
ibus_engine_service_set_property (IBusService *service,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection,
|
|
Packit Service |
1d8f1c |
const gchar *sender,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
const gchar *interface_name,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
GVariant *value,
|
|
Packit Service |
1d8f1c |
GError **error)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEngine *engine = IBUS_ENGINE (service);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (interface_name, IBUS_INTERFACE_ENGINE) != 0) {
|
|
Packit Service |
1d8f1c |
return IBUS_SERVICE_CLASS (ibus_engine_parent_class)->
|
|
Packit Service |
1d8f1c |
service_set_property (service,
|
|
Packit Service |
1d8f1c |
connection,
|
|
Packit Service |
1d8f1c |
sender,
|
|
Packit Service |
1d8f1c |
object_path,
|
|
Packit Service |
1d8f1c |
interface_name,
|
|
Packit Service |
1d8f1c |
property_name,
|
|
Packit Service |
1d8f1c |
value,
|
|
Packit Service |
1d8f1c |
error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (!ibus_engine_service_authorized_method (service, connection))
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_strcmp0 (property_name, "ContentType") == 0) {
|
|
Packit Service |
1d8f1c |
guint purpose = 0;
|
|
Packit Service |
1d8f1c |
guint hints = 0;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_variant_get (value, "(uu)", &purpose, &hints);
|
|
Packit Service |
1d8f1c |
if (purpose != engine->priv->content_purpose ||
|
|
Packit Service |
1d8f1c |
hints != engine->priv->content_hints) {
|
|
Packit Service |
1d8f1c |
engine->priv->content_purpose = purpose;
|
|
Packit Service |
1d8f1c |
engine->priv->content_hints = hints;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_signal_emit (engine,
|
|
Packit Service |
1d8f1c |
engine_signals[SET_CONTENT_TYPE],
|
|
Packit Service |
1d8f1c |
0,
|
|
Packit Service |
1d8f1c |
purpose,
|
|
Packit Service |
1d8f1c |
hints);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_engine_dbus_property_changed (engine, "ContentType", value);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
return TRUE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_val_if_reached (FALSE);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static gboolean
|
|
Packit Service |
1d8f1c |
ibus_engine_process_key_event (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint keyval,
|
|
Packit Service |
1d8f1c |
guint keycode,
|
|
Packit Service |
1d8f1c |
guint state)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
return FALSE;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_focus_in (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("focus-in");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_focus_out (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("focus-out");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_reset (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("reset");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_enable (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("enable");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_disable (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("disable");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_set_cursor_location (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
gint x,
|
|
Packit Service |
1d8f1c |
gint y,
|
|
Packit Service |
1d8f1c |
gint w,
|
|
Packit Service |
1d8f1c |
gint h)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("set-cursor-location (%d, %d, %d, %d)", x, y, w, h);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_set_capabilities (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint caps)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("set-capabilities (0x%04x)", caps);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_page_up (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("page-up");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_page_down (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("page-down");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_cursor_up (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("cursor-up");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_cursor_down (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("cursor-down");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_candidate_clicked (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint index,
|
|
Packit Service |
1d8f1c |
guint button,
|
|
Packit Service |
1d8f1c |
guint state)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("candidate-clicked");
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_property_activate (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *prop_name,
|
|
Packit Service |
1d8f1c |
guint prop_state)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("property-activate ('%s', %d)", prop_name, prop_state);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_property_show (IBusEngine *engine, const gchar *prop_name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("property-show ('%s')", prop_name);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_property_hide (IBusEngine *engine, const gchar *prop_name)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("property-hide ('%s')", prop_name);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_set_surrounding_text (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusText *text,
|
|
Packit Service |
1d8f1c |
guint cursor_pos,
|
|
Packit Service |
1d8f1c |
guint anchor_pos)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_assert (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (engine->priv->surrounding_text) {
|
|
Packit Service |
1d8f1c |
g_object_unref (engine->priv->surrounding_text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
engine->priv->surrounding_text = (IBusText *) g_object_ref_sink (text ? text : text_empty);
|
|
Packit Service |
1d8f1c |
engine->priv->surrounding_cursor_pos = cursor_pos;
|
|
Packit Service |
1d8f1c |
engine->priv->selection_anchor_pos = anchor_pos;
|
|
Packit Service |
1d8f1c |
// g_debug ("set-surrounding-text ('%s', %d, %d)", text->text, cursor_pos, anchor_pos);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_process_hand_writing_event (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gdouble *coordinates,
|
|
Packit Service |
1d8f1c |
guint coordinates_len)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// guint i;
|
|
Packit Service |
1d8f1c |
// g_debug ("process-hand-writing-event (%u)", coordinates_len);
|
|
Packit Service |
1d8f1c |
// for (i = 0; i < coordinates_len; i++)
|
|
Packit Service |
1d8f1c |
// g_debug (" %lf", coordinates[i]);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_cancel_hand_writing (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint n_strokes)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("cancel-hand-writing (%u)", n_strokes);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_set_content_type (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint purpose,
|
|
Packit Service |
1d8f1c |
guint hints)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
// g_debug ("set-content-type (%u %u)", purpose, hints);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *signal_name,
|
|
Packit Service |
1d8f1c |
GVariant *parameters)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
ibus_service_emit_signal ((IBusService *)engine,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_ENGINE,
|
|
Packit Service |
1d8f1c |
signal_name,
|
|
Packit Service |
1d8f1c |
parameters,
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
static void
|
|
Packit Service |
1d8f1c |
ibus_engine_dbus_property_changed (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
const gchar *property_name,
|
|
Packit Service |
1d8f1c |
GVariant *value)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
const gchar *object_path;
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection;
|
|
Packit Service |
1d8f1c |
GDBusMessage *message;
|
|
Packit Service |
1d8f1c |
GVariantBuilder *builder;
|
|
Packit Service |
1d8f1c |
gboolean retval;
|
|
Packit Service |
1d8f1c |
GError *error;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* we cannot use ibus_service_emit_signal() here, since we need to
|
|
Packit Service |
1d8f1c |
set sender of the signal so that GDBusProxy can properly track
|
|
Packit Service |
1d8f1c |
the property change. */
|
|
Packit Service |
1d8f1c |
object_path = ibus_service_get_object_path ((IBusService *)engine);
|
|
Packit Service |
1d8f1c |
message = g_dbus_message_new_signal (object_path,
|
|
Packit Service |
1d8f1c |
"org.freedesktop.DBus.Properties",
|
|
Packit Service |
1d8f1c |
"PropertiesChanged");
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_dbus_message_set_sender (message, "org.freedesktop.IBus");
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
builder = g_variant_builder_new (G_VARIANT_TYPE_ARRAY);
|
|
Packit Service |
1d8f1c |
g_variant_builder_add (builder, "{sv}", property_name, value);
|
|
Packit Service |
1d8f1c |
g_dbus_message_set_body (message,
|
|
Packit Service |
1d8f1c |
g_variant_new ("(sa{sv}as)",
|
|
Packit Service |
1d8f1c |
IBUS_INTERFACE_ENGINE,
|
|
Packit Service |
1d8f1c |
builder,
|
|
Packit Service |
1d8f1c |
NULL));
|
|
Packit Service |
1d8f1c |
g_variant_builder_unref (builder);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
error = NULL;
|
|
Packit Service |
1d8f1c |
connection = ibus_service_get_connection ((IBusService *)engine);
|
|
Packit Service |
1d8f1c |
retval = g_dbus_connection_send_message (connection,
|
|
Packit Service |
1d8f1c |
message,
|
|
Packit Service |
1d8f1c |
G_DBUS_SEND_MESSAGE_FLAGS_NONE,
|
|
Packit Service |
1d8f1c |
NULL,
|
|
Packit Service |
1d8f1c |
&error);
|
|
Packit Service |
1d8f1c |
if (!retval) {
|
|
Packit Service |
1d8f1c |
g_warning ("Failed to emit PropertiesChanged signal: %s",
|
|
Packit Service |
1d8f1c |
error->message);
|
|
Packit Service |
1d8f1c |
g_error_free (error);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
g_object_unref (message);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusEngine *
|
|
Packit Service |
1d8f1c |
ibus_engine_new (const gchar *engine_name,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
return ibus_engine_new_with_type (IBUS_TYPE_ENGINE,
|
|
Packit Service |
1d8f1c |
engine_name,
|
|
Packit Service |
1d8f1c |
object_path,
|
|
Packit Service |
1d8f1c |
connection);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusEngine *
|
|
Packit Service |
1d8f1c |
ibus_engine_new_with_type (GType engine_type,
|
|
Packit Service |
1d8f1c |
const gchar *engine_name,
|
|
Packit Service |
1d8f1c |
const gchar *object_path,
|
|
Packit Service |
1d8f1c |
GDBusConnection *connection)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (g_type_is_a (engine_type, IBUS_TYPE_ENGINE), NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (engine_name != NULL, NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (object_path != NULL, NULL);
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (G_IS_DBUS_CONNECTION (connection), NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GObject *object = g_object_new (engine_type,
|
|
Packit Service |
1d8f1c |
"engine-name", engine_name,
|
|
Packit Service |
1d8f1c |
"object-path", object_path,
|
|
Packit Service |
1d8f1c |
"connection", connection,
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
return IBUS_ENGINE (object);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_commit_text (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusText *text)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_TEXT (text));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)text);
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"CommitText",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(v)", variant));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_object_is_floating (text)) {
|
|
Packit Service |
1d8f1c |
g_object_unref (text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_update_preedit_text (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusText *text,
|
|
Packit Service |
1d8f1c |
guint cursor_pos,
|
|
Packit Service |
1d8f1c |
gboolean visible)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
ibus_engine_update_preedit_text_with_mode (engine,
|
|
Packit Service |
1d8f1c |
text, cursor_pos, visible, IBUS_ENGINE_PREEDIT_CLEAR);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_update_preedit_text_with_mode (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusText *text,
|
|
Packit Service |
1d8f1c |
guint cursor_pos,
|
|
Packit Service |
1d8f1c |
gboolean visible,
|
|
Packit Service |
1d8f1c |
IBusPreeditFocusMode mode)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_TEXT (text));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)text);
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"UpdatePreeditText",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(vubu)", variant, cursor_pos, visible, mode));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_object_is_floating (text)) {
|
|
Packit Service |
1d8f1c |
g_object_unref (text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void ibus_engine_update_auxiliary_text (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusText *text,
|
|
Packit Service |
1d8f1c |
gboolean visible)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_TEXT (text));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)text);
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"UpdateAuxiliaryText",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(vb)", variant, visible));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_object_is_floating (text)) {
|
|
Packit Service |
1d8f1c |
g_object_unref (text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_update_lookup_table (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
gboolean visible)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)table);
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"UpdateLookupTable",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(vb)", variant, visible));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_object_is_floating (table)) {
|
|
Packit Service |
1d8f1c |
g_object_unref (table);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_update_lookup_table_fast (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusLookupTable *table,
|
|
Packit Service |
1d8f1c |
gboolean visible)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
/* Note: gnome shell needs the previous page and next page
|
|
Packit Service |
1d8f1c |
to correctly show the page up/down arrows,
|
|
Packit Service |
1d8f1c |
send three pages instead of one page. */
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_LOOKUP_TABLE (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
IBusLookupTable *new_table;
|
|
Packit Service |
1d8f1c |
IBusText *text;
|
|
Packit Service |
1d8f1c |
gint page_begin;
|
|
Packit Service |
1d8f1c |
gint cursor_pos;
|
|
Packit Service |
1d8f1c |
gint i;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (table->candidates->len < table->page_size << 2) {
|
|
Packit Service |
1d8f1c |
ibus_engine_update_lookup_table (engine, table, visible);
|
|
Packit Service |
1d8f1c |
return;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
page_begin = (table->cursor_pos / table->page_size) * table->page_size;
|
|
Packit Service |
1d8f1c |
cursor_pos = ibus_lookup_table_get_cursor_in_page (table);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (table->cursor_pos >= table->page_size) {
|
|
Packit Service |
1d8f1c |
/* has previous page, adjust the value. */
|
|
Packit Service |
1d8f1c |
page_begin -= table->page_size;
|
|
Packit Service |
1d8f1c |
cursor_pos += table->page_size;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
new_table = ibus_lookup_table_new
|
|
Packit Service |
1d8f1c |
(table->page_size, 0, table->cursor_visible, table->round);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* '3' means the previous page, current page and next page. */
|
|
Packit Service |
1d8f1c |
for (i = page_begin; i < page_begin + 3 * table->page_size &&
|
|
Packit Service |
1d8f1c |
i < table->candidates->len; i++) {
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_append_candidate
|
|
Packit Service |
1d8f1c |
(new_table, ibus_lookup_table_get_candidate (table, i));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
for (i = 0; (text = ibus_lookup_table_get_label (table, i)) != NULL; i++) {
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_append_label (new_table, text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_set_cursor_pos (new_table, cursor_pos);
|
|
Packit Service |
1d8f1c |
ibus_lookup_table_set_orientation
|
|
Packit Service |
1d8f1c |
(new_table, ibus_lookup_table_get_orientation (table));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_engine_update_lookup_table (engine, new_table, visible);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_object_is_floating (table)) {
|
|
Packit Service |
1d8f1c |
g_object_unref (table);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_forward_key_event (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint keyval,
|
|
Packit Service |
1d8f1c |
guint keycode,
|
|
Packit Service |
1d8f1c |
guint state)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"ForwardKeyEvent",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(uuu)", keyval, keycode, state));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void ibus_engine_delete_surrounding_text (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
gint offset_from_cursor,
|
|
Packit Service |
1d8f1c |
guint nchars)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEnginePrivate *priv;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
priv = IBUS_ENGINE_GET_PRIVATE (engine);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* Update surrounding-text cache. This is necessary since some
|
|
Packit Service |
1d8f1c |
engines call ibus_engine_get_surrounding_text() immediately
|
|
Packit Service |
1d8f1c |
after ibus_engine_delete_surrounding_text(). */
|
|
Packit Service |
1d8f1c |
if (priv->surrounding_text) {
|
|
Packit Service |
1d8f1c |
IBusText *text;
|
|
Packit Service |
1d8f1c |
glong cursor_pos, len;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
cursor_pos = priv->surrounding_cursor_pos + offset_from_cursor;
|
|
Packit Service |
1d8f1c |
len = ibus_text_get_length (priv->surrounding_text);
|
|
Packit Service |
1d8f1c |
if (cursor_pos >= 0 && len - cursor_pos >= nchars) {
|
|
Packit Service |
1d8f1c |
gunichar *ucs;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ucs = g_utf8_to_ucs4_fast (priv->surrounding_text->text,
|
|
Packit Service |
1d8f1c |
-1,
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
memmove (&ucs[cursor_pos],
|
|
Packit Service |
1d8f1c |
&ucs[cursor_pos + nchars],
|
|
Packit Service |
1d8f1c |
sizeof(gunichar) * (len - cursor_pos - nchars));
|
|
Packit Service |
1d8f1c |
ucs[len - nchars] = 0;
|
|
Packit Service |
1d8f1c |
text = ibus_text_new_from_ucs4 (ucs);
|
|
Packit Service |
1d8f1c |
g_free (ucs);
|
|
Packit Service |
1d8f1c |
priv->surrounding_cursor_pos = cursor_pos;
|
|
Packit Service |
1d8f1c |
} else {
|
|
Packit Service |
1d8f1c |
text = text_empty;
|
|
Packit Service |
1d8f1c |
priv->surrounding_cursor_pos = 0;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_object_unref (priv->surrounding_text);
|
|
Packit Service |
1d8f1c |
priv->surrounding_text = g_object_ref_sink (text);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"DeleteSurroundingText",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(iu)", offset_from_cursor, nchars));
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_get_surrounding_text (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusText **text,
|
|
Packit Service |
1d8f1c |
guint *cursor_pos,
|
|
Packit Service |
1d8f1c |
guint *anchor_pos)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
IBusEnginePrivate *priv;
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
const gboolean signal_only = (text == NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_if_fail (( signal_only && (cursor_pos == NULL)) ||
|
|
Packit Service |
1d8f1c |
(!signal_only && (cursor_pos != NULL)));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
g_return_if_fail (( signal_only && (anchor_pos == NULL)) ||
|
|
Packit Service |
1d8f1c |
(!signal_only && (anchor_pos != NULL)));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
priv = IBUS_ENGINE_GET_PRIVATE (engine);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (!signal_only) {
|
|
Packit Service |
1d8f1c |
*text = g_object_ref (priv->surrounding_text);
|
|
Packit Service |
1d8f1c |
*cursor_pos = priv->surrounding_cursor_pos;
|
|
Packit Service |
1d8f1c |
*anchor_pos = priv->selection_anchor_pos;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
/* tell the client that this engine will utilize surrounding-text
|
|
Packit Service |
1d8f1c |
* feature, which causes periodical update. Note that the client
|
|
Packit Service |
1d8f1c |
* should request the initial surrounding-text when the engine is
|
|
Packit Service |
1d8f1c |
* enabled (see ibus_im_context_focus_in() and
|
|
Packit Service |
1d8f1c |
* _ibus_context_enabled_cb() in client/gtk2/ibusimcontext.c). */
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"RequireSurroundingText",
|
|
Packit Service |
1d8f1c |
NULL);
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
// g_debug ("get-surrounding-text ('%s', %d, %d)", (*text)->text, *cursor_pos, *anchor_pos);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_get_content_type (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
guint *purpose,
|
|
Packit Service |
1d8f1c |
guint *hints)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
*purpose = engine->priv->content_purpose;
|
|
Packit Service |
1d8f1c |
*hints = engine->priv->content_hints;
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_register_properties (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusPropList *prop_list)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_PROP_LIST (prop_list));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)prop_list);
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"RegisterProperties",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(v)", variant));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_object_is_floating (prop_list)) {
|
|
Packit Service |
1d8f1c |
g_object_unref (prop_list);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
void
|
|
Packit Service |
1d8f1c |
ibus_engine_update_property (IBusEngine *engine,
|
|
Packit Service |
1d8f1c |
IBusProperty *prop)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine));
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_PROPERTY (prop));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
GVariant *variant = ibus_serializable_serialize ((IBusSerializable *)prop);
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine,
|
|
Packit Service |
1d8f1c |
"UpdateProperty",
|
|
Packit Service |
1d8f1c |
g_variant_new ("(v)", variant));
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
if (g_object_is_floating (prop)) {
|
|
Packit Service |
1d8f1c |
g_object_unref (prop);
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
#define DEFINE_FUNC(name, Name) \
|
|
Packit Service |
1d8f1c |
void \
|
|
Packit Service |
1d8f1c |
ibus_engine_##name (IBusEngine *engine) \
|
|
Packit Service |
1d8f1c |
{ \
|
|
Packit Service |
1d8f1c |
g_return_if_fail (IBUS_IS_ENGINE (engine)); \
|
|
Packit Service |
1d8f1c |
ibus_engine_emit_signal (engine, \
|
|
Packit Service |
1d8f1c |
#Name, \
|
|
Packit Service |
1d8f1c |
NULL); \
|
|
Packit Service |
1d8f1c |
}
|
|
Packit Service |
1d8f1c |
DEFINE_FUNC (show_preedit_text, ShowPreeditText)
|
|
Packit Service |
1d8f1c |
DEFINE_FUNC (hide_preedit_text, HidePreeditText)
|
|
Packit Service |
1d8f1c |
DEFINE_FUNC (show_auxiliary_text, ShowAuxiliaryText)
|
|
Packit Service |
1d8f1c |
DEFINE_FUNC (hide_auxiliary_text, HideAuxiliaryText)
|
|
Packit Service |
1d8f1c |
DEFINE_FUNC (show_lookup_table, ShowLookupTable)
|
|
Packit Service |
1d8f1c |
DEFINE_FUNC (hide_lookup_table, HideLookupTable)
|
|
Packit Service |
1d8f1c |
#undef DEFINE_FUNC
|
|
Packit Service |
1d8f1c |
|
|
Packit Service |
1d8f1c |
const gchar *
|
|
Packit Service |
1d8f1c |
ibus_engine_get_name (IBusEngine *engine)
|
|
Packit Service |
1d8f1c |
{
|
|
Packit Service |
1d8f1c |
g_return_val_if_fail (IBUS_IS_ENGINE (engine), NULL);
|
|
Packit Service |
1d8f1c |
return engine->priv->engine_name;
|
|
Packit Service |
1d8f1c |
}
|