static void _init_ibus (void) { if (_bus != NULL) return; ibus_init (); _bus = ibus_bus_new (); g_signal_connect (_bus, "disconnected", G_CALLBACK (_bus_disconnected_cb), NULL); _use_sync_mode = _get_boolean_env ("IBUS_ENABLE_SYNC_MODE", FALSE); }
static void fcitx_im_context_class_init(FcitxIMContextClass *klass) { GtkIMContextClass *im_context_class = GTK_IM_CONTEXT_CLASS(klass); GObjectClass *gobject_class = G_OBJECT_CLASS(klass); parent_class = (GtkIMContextClass *) g_type_class_peek_parent (klass); im_context_class->set_client_window = fcitx_im_context_set_client_window; im_context_class->filter_keypress = fcitx_im_context_filter_keypress; im_context_class->reset = fcitx_im_context_reset; im_context_class->get_preedit_string = fcitx_im_context_get_preedit_string; im_context_class->focus_in = fcitx_im_context_focus_in; im_context_class->focus_out = fcitx_im_context_focus_out; im_context_class->set_cursor_location = fcitx_im_context_set_cursor_location; im_context_class->set_use_preedit = fcitx_im_context_set_use_preedit; im_context_class->set_surrounding = fcitx_im_context_set_surrounding; gobject_class->finalize = fcitx_im_context_finalize; _signal_commit_id = g_signal_lookup("commit", G_TYPE_FROM_CLASS(klass)); g_assert(_signal_commit_id != 0); _signal_preedit_changed_id = g_signal_lookup("preedit-changed", G_TYPE_FROM_CLASS(klass)); g_assert(_signal_preedit_changed_id != 0); _signal_preedit_start_id = g_signal_lookup("preedit-start", G_TYPE_FROM_CLASS(klass)); g_assert(_signal_preedit_start_id != 0); _signal_preedit_end_id = g_signal_lookup("preedit-end", G_TYPE_FROM_CLASS(klass)); g_assert(_signal_preedit_end_id != 0); _signal_delete_surrounding_id = g_signal_lookup("delete-surrounding", G_TYPE_FROM_CLASS(klass)); g_assert(_signal_delete_surrounding_id != 0); _signal_retrieve_surrounding_id = g_signal_lookup("retrieve-surrounding", G_TYPE_FROM_CLASS(klass)); g_assert(_signal_retrieve_surrounding_id != 0); _use_key_snooper = !_get_boolean_env ("IBUS_DISABLE_SNOOPER", !(_ENABLE_SNOOPER)) && !_get_boolean_env("FCITX_DISABLE_SNOOPER", !(_ENABLE_SNOOPER)); /* env IBUS_DISABLE_SNOOPER does not exist */ if (_use_key_snooper) { /* disable snooper if app is in _no_snooper_apps */ const gchar * prgname = g_get_prgname (); if (g_getenv ("IBUS_NO_SNOOPER_APPS")) { _no_snooper_apps = g_getenv ("IBUS_NO_SNOOPER_APPS"); } if (g_getenv ("FCITX_NO_SNOOPER_APPS")) { _no_snooper_apps = g_getenv ("FCITX_NO_SNOOPER_APPS"); } gchar **p; gchar ** apps = g_strsplit (_no_snooper_apps, ",", 0); for (p = apps; *p != NULL; p++) { if (g_regex_match_simple (*p, prgname, 0, 0)) { _use_key_snooper = FALSE; break; } } g_strfreev (apps); } /* make ibus fix benefits us */ _use_sync_mode = _get_boolean_env("IBUS_ENABLE_SYNC_MODE", FALSE) || _get_boolean_env("FCITX_ENABLE_SYNC_MODE", FALSE); /* always install snooper */ if (_key_snooper_id == 0) _key_snooper_id = gtk_key_snooper_install (_key_snooper_cb, NULL); }