BusPanelProxy * bus_panel_proxy_new (BusConnection *connection) { g_assert (BUS_IS_CONNECTION (connection)); GObject *obj; obj = g_object_new (BUS_TYPE_PANEL_PROXY, "name", NULL, "path", IBUS_PATH_PANEL, "connection", connection, NULL); return BUS_PANEL_PROXY (obj); }
BusPanelProxy * bus_panel_proxy_new (BusConnection *connection) { g_assert (BUS_IS_CONNECTION (connection)); GObject *obj; obj = g_initable_new (BUS_TYPE_PANEL_PROXY, NULL, NULL, "g-object-path", IBUS_PATH_PANEL, "g-interface-name", IBUS_INTERFACE_PANEL, "g-connection", bus_connection_get_dbus_connection (connection), "g-default-timeout", g_gdbus_timeout, "g-flags", G_DBUS_PROXY_FLAGS_DO_NOT_AUTO_START | G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, NULL); return BUS_PANEL_PROXY (obj); }
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; }