示例#1
0
void IMContextImpl::set_enabled (bool status)
{
    enabled = status;
    if (imengine != NULL) {
        imengine->focus_out ();
        imengine->reset ();
    }

    BackEndPointer scim_backend = scim_console->get_scim_backend ();
    const String scim_language = scim_console->get_scim_language ();
    if (enabled) {
        IMEngineFactoryPointer factory = scim_backend->get_default_factory (scim_language, "UTF-8");
        if (factory != NULL) {
            imengine = factory->create_instance ("UTF-8", imengine_id);
            ++imengine_id;
        }
    } else {
        imengine = NULL;
    }

    if (imengine == NULL) {
        imengine = fallback_imengine;
        factory_info = PanelFactoryInfo (String (""), String (_ ("English/Keyboard")), String ("C"), String (SCIM_KEYBOARD_ICON_FILE));
    } else {
        IMEngineFactoryPointer factory = scim_backend->get_factory (imengine->get_factory_uuid ());
        factory_info = PanelFactoryInfo (factory->get_uuid (), utf8_wcstombs (factory->get_name ()), factory->get_language (), factory->get_icon_file ());
        
        imengine->signal_connect_show_preedit_string (slot (slot_show_preedit));
        imengine->signal_connect_show_aux_string (slot (slot_show_aux));
        imengine->signal_connect_show_lookup_table (slot (slot_show_lookup_table));

        imengine->signal_connect_hide_preedit_string (slot (slot_hide_preedit));
        imengine->signal_connect_hide_aux_string (slot (slot_hide_aux));
        imengine->signal_connect_hide_lookup_table (slot (slot_hide_lookup_table));

        imengine->signal_connect_update_preedit_caret (slot (slot_update_preedit_cursor_position));
        imengine->signal_connect_update_preedit_string (slot (slot_update_preedit_string));
        imengine->signal_connect_update_aux_string (slot (slot_update_aux_string));
        imengine->signal_connect_update_lookup_table (slot (slot_update_lookup_table));
        imengine->signal_connect_commit_string (slot (slot_commit));
        imengine->signal_connect_forward_key_event (slot (slot_forward_key_event));

        imengine->signal_connect_register_properties (slot (slot_register_properties));
        imengine->signal_connect_update_property (slot (slot_update_property));

        imengine->signal_connect_beep (slot (slot_beep));

        imengine->signal_connect_start_helper (slot (slot_start_helper));
        imengine->signal_connect_stop_helper (slot (slot_stop_helper));
        imengine->signal_connect_send_helper_event (slot (slot_send_helper_event));

        imengine->signal_connect_get_surrounding_text (slot (slot_get_surrounding_text));
        imengine->signal_connect_delete_surrounding_text (slot (slot_delete_surrounding_text));
    }
        
    imengine->focus_in ();
}
示例#2
0
void IMContextImpl::change_imengine (IMEngineFactoryPointer new_factory)
{
    if (imengine != NULL) {
        imengine->focus_out ();
        imengine->reset ();
    }

    BackEndPointer scim_backend = scim_console->get_scim_backend ();
    scim_backend->set_default_factory (scim_console->get_scim_language (), new_factory->get_uuid ());
    imengine = new_factory->create_instance ("UTF-8", imengine_id);
    ++imengine_id;

    factory_info = PanelFactoryInfo (new_factory->get_uuid (), utf8_wcstombs (new_factory->get_name ()), new_factory->get_language (), new_factory->get_icon_file ());

    if (imengine != NULL) {
        imengine->signal_connect_show_preedit_string (slot (slot_show_preedit));
        imengine->signal_connect_show_aux_string (slot (slot_show_aux));
        imengine->signal_connect_show_lookup_table (slot (slot_show_lookup_table));

        imengine->signal_connect_hide_preedit_string (slot (slot_hide_preedit));
        imengine->signal_connect_hide_aux_string (slot (slot_hide_aux));
        imengine->signal_connect_hide_lookup_table (slot (slot_hide_lookup_table));

        imengine->signal_connect_update_preedit_caret (slot (slot_update_preedit_cursor_position));
        imengine->signal_connect_update_preedit_string (slot (slot_update_preedit_string));
        imengine->signal_connect_update_aux_string (slot (slot_update_aux_string));
        imengine->signal_connect_update_lookup_table (slot (slot_update_lookup_table));
        imengine->signal_connect_commit_string (slot (slot_commit));
        imengine->signal_connect_forward_key_event (slot (slot_forward_key_event));

        imengine->signal_connect_register_properties (slot (slot_register_properties));
        imengine->signal_connect_update_property (slot (slot_update_property));

        imengine->signal_connect_beep (slot (slot_beep));

        imengine->signal_connect_start_helper (slot (slot_start_helper));
        imengine->signal_connect_stop_helper (slot (slot_stop_helper));
        imengine->signal_connect_send_helper_event (slot (slot_send_helper_event));

        imengine->signal_connect_get_surrounding_text (slot (slot_get_surrounding_text));
        imengine->signal_connect_delete_surrounding_text (slot (slot_delete_surrounding_text));
    }
    
    preedit_string.clear ();
    preedit_attributes.clear ();
    preedit_cursor_position = 0;
    preedit_shown = false;

    enabled = true;

    imengine->focus_in ();
}