1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/*
* $Id$
*/
#ifndef __X_IM_H__
#define __X_IM_H__
#include <kiklib/kik_dlfcn.h>
#include "x.h" /* KeySym, XKeyEvent */
#include <ml_term.h>
#include "x_im_candidate_screen.h"
#include "x_im_status_screen.h"
#define X_IM_PREEDIT_NOCURSOR -1
/*
* information for the current preedit string
*/
typedef struct x_im_preedit
{
ml_char_t * chars ;
u_int num_of_chars ; /* == array size */
u_int filled_len ;
int segment_offset ;
int cursor_offset ;
} x_im_preedit_t ;
typedef struct x_im_event_listener
{
void * self ;
int (*get_spot)( void * , ml_char_t * , int , int * , int *) ;
u_int (*get_line_height)( void *) ;
int (*is_vertical)( void *) ;
int (*draw_preedit_str)( void * , ml_char_t * , u_int , int) ;
void (*im_changed)( void * , char *) ;
int (*compare_key_state_with_modmap)( void * , u_int , int * , int * ,
int * , int * , int * , int * , int * ,
int *) ;
void (*write_to_term)( void * , u_char * , size_t) ;
x_display_t * (*get_display)( void *) ;
x_font_manager_t * (*get_font_man)( void *) ;
x_color_manager_t * (*get_color_man)( void *) ;
} x_im_event_listener_t ;
/*
* dirty hack to replace -export-dynamic option of libtool
*/
typedef struct x_im_export_syms
{
int (*ml_str_init)( ml_char_t * , u_int) ;
int (*ml_str_delete)( ml_char_t * , u_int) ;
int (*ml_char_combine)( ml_char_t * , u_char * , size_t ,
mkf_charset_t , int , int , ml_color_t ,
ml_color_t , int , int) ;
int (*ml_char_set)( ml_char_t * , u_char * , size_t ,
mkf_charset_t cs , int , int , ml_color_t ,
ml_color_t , int , int) ;
char * (*ml_get_char_encoding_name)( ml_char_encoding_t) ;
ml_char_encoding_t (*ml_get_char_encoding)( const char *) ;
int (*ml_is_msb_set)( mkf_charset_t cs) ;
ml_isciikey_state_t (*ml_isciikey_state_new)( int) ;
int (*ml_isciikey_state_delete)( ml_isciikey_state_t) ;
size_t (*ml_convert_ascii_to_iscii)( ml_isciikey_state_t , u_char * ,
size_t , u_char * , size_t) ;
mkf_parser_t * (*ml_parser_new)( ml_char_encoding_t) ;
mkf_conv_t * (*ml_conv_new)( ml_char_encoding_t) ;
x_im_candidate_screen_t * (*x_im_candidate_screen_new)(
x_display_t * ,
x_font_manager_t * ,
x_color_manager_t * ,
int , int , u_int , int , int) ;
x_im_status_screen_t * (*x_im_status_screen_new)(
x_display_t * ,
x_font_manager_t * ,
x_color_manager_t * ,
int , int , int) ;
int (*x_event_source_add_fd)( int , void (*handler)(void)) ;
int (*x_event_source_remove_fd)( int) ;
} x_im_export_syms_t ;
/*
* input method module object
*/
typedef struct x_im
{
kik_dl_handle_t handle ;
char * name ;
x_im_event_listener_t * listener ;
x_im_candidate_screen_t * cand_screen ;
x_im_status_screen_t * stat_screen ;
x_im_preedit_t preedit ;
/*
* methods
*/
int (*delete)( struct x_im *) ;
/* Return 1 if key event to be processed is still left. */
int (*key_event)( struct x_im * , u_char , KeySym , XKeyEvent *) ;
/* Return 1 if switching is succeeded. */
int (*switch_mode)( struct x_im *) ;
/* Return 1 if input method is active. */
int (*is_active)( struct x_im *) ;
void (*focused)( struct x_im *) ;
void (*unfocused)( struct x_im *) ;
} x_im_t ;
x_im_t * x_im_new( ml_char_encoding_t term_encoding ,
x_im_event_listener_t * im_listener ,
char * input_method ,
u_int mod_ignore_mask) ;
void x_im_delete( x_im_t * xim) ;
void x_im_redraw_preedit( x_im_t * im , int is_focused) ;
#define IM_API_VERSION 0x08
#define IM_API_COMPAT_CHECK_MAGIC \
(((IM_API_VERSION & 0x0f) << 28) | \
((sizeof( x_im_t) & 0xff) << 20) | \
((sizeof( x_im_export_syms_t) & 0xff) << 12) | \
(sizeof( x_im_candidate_screen_t) & 0xfff))
#endif
|