void bus_panel_proxy_focus_in (BusPanelProxy *panel, BusInputContext *context) { g_assert (BUS_IS_PANEL_PROXY (panel)); g_assert (BUS_IS_INPUT_CONTEXT (context)); if (panel->focused_context == context) return; if (panel->focused_context != NULL) bus_panel_proxy_focus_out (panel, panel->focused_context); g_object_ref_sink (context); panel->focused_context = context; const gchar *path = ibus_service_get_path ((IBusService *)context); ibus_proxy_call ((IBusProxy *) panel, "FocusIn", IBUS_TYPE_OBJECT_PATH, &path, G_TYPE_INVALID); /* install signal handlers */ gint i; for (i = 0; i < G_N_ELEMENTS (__signals); i++) { g_signal_connect (context, __signals[i].name, __signals[i].callback, panel); } }
void bus_panel_proxy_focus_out (BusPanelProxy *panel, BusInputContext *context) { g_assert (BUS_IS_PANEL_PROXY (panel)); g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (panel->focused_context == context); /* uninstall signal handlers */ gint i; for (i = 0; i < G_N_ELEMENTS (__signals); i++) { g_signal_handlers_disconnect_by_func (context, __signals[i].callback, panel); } const gchar *path = ibus_service_get_path ((IBusService *)context); ibus_proxy_call ((IBusProxy *) panel, "FocusOut", IBUS_TYPE_OBJECT_PATH, &path, G_TYPE_INVALID); g_object_unref (panel->focused_context); panel->focused_context = NULL; }
static void bus_panel_proxy_property_activate (BusPanelProxy *panel, const gchar *prop_name, gint prop_state) { g_assert (BUS_IS_PANEL_PROXY (panel)); if (panel->focused_context) { bus_input_context_property_activate (panel->focused_context, prop_name, prop_state); } }
static void _context_destroy_cb (BusInputContext *context, BusPanelProxy *panel) { g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (BUS_IS_PANEL_PROXY (panel)); g_assert (context == panel->focused_context); bus_panel_proxy_focus_out (panel, context); }
void bus_panel_proxy_update_property (BusPanelProxy *panel, IBusProperty *prop) { g_assert (BUS_IS_PANEL_PROXY (panel)); g_assert (prop != NULL); ibus_proxy_call ((IBusProxy *) panel, "UpdateProperty", IBUS_TYPE_PROPERTY, &prop, G_TYPE_INVALID); }
static void bus_panel_proxy_cursor_down (BusPanelProxy *panel) { g_assert (BUS_IS_PANEL_PROXY (panel)); BusPanelProxyPrivate *priv; priv = BUS_PANEL_PROXY_GET_PRIVATE (panel); if (priv->focused_context) { bus_input_context_cursor_down (priv->focused_context); } }
static void _context_update_property_cb (BusInputContext *context, IBusProperty *prop, BusPanelProxy *panel) { g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (BUS_IS_PANEL_PROXY (panel)); g_return_if_fail (panel->focused_context == context); bus_panel_proxy_update_property (panel, prop); }
void bus_panel_proxy_register_properties (BusPanelProxy *panel, IBusPropList *prop_list) { g_assert (BUS_IS_PANEL_PROXY (panel)); g_assert (prop_list != NULL); ibus_proxy_call ((IBusProxy *) panel, "RegisterProperties", IBUS_TYPE_PROP_LIST, &prop_list, G_TYPE_INVALID); ibus_connection_flush (ibus_proxy_get_connection((IBusProxy *)panel)); }
static void _context_register_properties_cb (BusInputContext *context, IBusPropList *prop_list, BusPanelProxy *panel) { g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (BUS_IS_PANEL_PROXY (panel)); g_return_if_fail (panel->focused_context == context); bus_panel_proxy_register_properties (panel, prop_list); }
static void _context_destroy_cb (BusInputContext *context, BusPanelProxy *panel) { g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (BUS_IS_PANEL_PROXY (panel)); BusPanelProxyPrivate *priv; priv = BUS_PANEL_PROXY_GET_PRIVATE (panel); g_assert (context == priv->focused_context); bus_panel_proxy_focus_out (panel, context); }
void bus_panel_proxy_update_lookup_table (BusPanelProxy *panel, IBusLookupTable *table, gboolean visible) { g_assert (BUS_IS_PANEL_PROXY (panel)); g_assert (table != NULL); ibus_proxy_call ((IBusProxy *) panel, "UpdateLookupTable", IBUS_TYPE_LOOKUP_TABLE, &table, G_TYPE_BOOLEAN, &visible, G_TYPE_INVALID); }
void bus_panel_proxy_update_auxiliary_text (BusPanelProxy *panel, IBusText *text, gboolean visible) { g_assert (BUS_IS_PANEL_PROXY (panel)); g_assert (text != NULL); ibus_proxy_call ((IBusProxy *) panel, "UpdateAuxiliaryText", IBUS_TYPE_TEXT, &text, G_TYPE_BOOLEAN, &visible, G_TYPE_INVALID); }
static void _context_update_lookup_table_cb (BusInputContext *context, IBusLookupTable *table, gboolean visible, BusPanelProxy *panel) { g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (BUS_IS_PANEL_PROXY (panel)); g_return_if_fail (panel->focused_context == context); bus_panel_proxy_update_lookup_table (panel, table, visible); }
static void _context_update_auxiliary_text_cb (BusInputContext *context, IBusText *text, gboolean visible, BusPanelProxy *panel) { g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (BUS_IS_PANEL_PROXY (panel)); g_return_if_fail (panel->focused_context == context); bus_panel_proxy_update_auxiliary_text (panel, text, visible); }
static void bus_panel_proxy_candidate_clicked (BusPanelProxy *panel, guint index, guint button, guint state) { g_assert (BUS_IS_PANEL_PROXY (panel)); if (panel->focused_context) { bus_input_context_candidate_clicked (panel->focused_context, index, button, state); } }
static void _context_set_cursor_location_cb (BusInputContext *context, gint x, gint y, gint w, gint h, BusPanelProxy *panel) { g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (BUS_IS_PANEL_PROXY (panel)); g_return_if_fail (panel->focused_context == context); bus_panel_proxy_set_cursor_location (panel, x, y, w, h); }
void bus_panel_proxy_update_preedit_text (BusPanelProxy *panel, IBusText *text, guint cursor_pos, gboolean visible) { g_assert (BUS_IS_PANEL_PROXY (panel)); g_assert (text != NULL); ibus_proxy_call ((IBusProxy *) panel, "UpdatePreeditText", IBUS_TYPE_TEXT, &text, G_TYPE_UINT, &cursor_pos, G_TYPE_BOOLEAN, &visible, G_TYPE_INVALID); }
void bus_panel_proxy_set_cursor_location (BusPanelProxy *panel, gint x, gint y, gint w, gint h) { g_assert (BUS_IS_PANEL_PROXY (panel)); ibus_proxy_call ((IBusProxy *) panel, "SetCursorLocation", G_TYPE_INT, &x, G_TYPE_INT, &y, G_TYPE_INT, &w, G_TYPE_INT, &h, G_TYPE_INVALID); }
static void _context_update_preedit_text_cb (BusInputContext *context, IBusText *text, guint cursor_pos, gboolean visible, BusPanelProxy *panel) { g_assert (BUS_IS_INPUT_CONTEXT (context)); g_assert (text != NULL); g_assert (BUS_IS_PANEL_PROXY (panel)); g_return_if_fail (panel->focused_context == context); bus_panel_proxy_update_preedit_text (panel, text, cursor_pos, visible); }
static gboolean bus_panel_proxy_ibus_signal (IBusProxy *proxy, IBusMessage *message) { g_assert (BUS_IS_PANEL_PROXY (proxy)); g_assert (message != NULL); BusPanelProxy *panel; IBusError *error; gint i; static const struct { const gchar *member; const guint signal_id; } signals [] = { { "PageUp", PAGE_UP }, { "PageDown", PAGE_DOWN }, { "CursorUp", CURSOR_UP }, { "CursorDown", CURSOR_DOWN }, }; panel = BUS_PANEL_PROXY (proxy); for (i = 0; i < G_N_ELEMENTS (signals); i++) { if (ibus_message_is_signal (message, IBUS_INTERFACE_PANEL, signals[i].member)) { g_signal_emit (panel, panel_signals[signals[i].signal_id], 0); goto handled; } } if (ibus_message_is_signal (message, IBUS_INTERFACE_PANEL, "CandidateClicked")) { guint index, button, state; gboolean retval; retval = ibus_message_get_args (message, &error, G_TYPE_UINT, &index, G_TYPE_UINT, &button, G_TYPE_UINT, &state, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (panel, panel_signals[CANDIDATE_CLICKED], 0, index, button, state); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_PANEL, "PropertyActivate")) { gchar *prop_name; gint prop_state; gboolean retval; retval = ibus_message_get_args (message, &error, G_TYPE_STRING, &prop_name, G_TYPE_INT, &prop_state, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (panel, panel_signals[PROPERTY_ACTIVATE], 0, prop_name, prop_state); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_PANEL, "PropertyShow")) { gchar *prop_name; gboolean retval; retval = ibus_message_get_args (message, &error, G_TYPE_STRING, &prop_name, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (panel, panel_signals[PROPERTY_SHOW], 0, prop_name); } else if (ibus_message_is_signal (message, IBUS_INTERFACE_PANEL, "PropertyHide")) { gchar *prop_name; gboolean retval; retval = ibus_message_get_args (message, &error, G_TYPE_STRING, &prop_name, G_TYPE_INVALID); if (!retval) goto failed; g_signal_emit (panel, panel_signals[PROPERTY_HIDE], 0, prop_name); } handled: g_signal_stop_emission_by_name (panel, "ibus-signal"); return TRUE; failed: g_warning ("%s: %s", error->name, error->message); ibus_error_free (error); return FALSE; }