diff -r ac6ec6344d05 inputmethod/uim/im_uim.c --- a/inputmethod/uim/im_uim.c +++ b/inputmethod/uim/im_uim.c @@ -78,6 +78,8 @@ u_int cand_limit ; + int is_mozc ; + } im_uim_t ; KIK_LIST_TYPEDEF( im_uim_t) ; @@ -744,13 +746,13 @@ uim = (im_uim_t*) p ; + (*uim->im.listener->get_spot)( uim->im.listener->self , + uim->im.preedit.chars , + uim->im.preedit.segment_offset , + &x , &y) ; + if( uim->im.cand_screen == NULL) { - (*uim->im.listener->get_spot)( uim->im.listener->self , - uim->im.preedit.chars , - uim->im.preedit.segment_offset , - &x , &y) ; - if( ! ( uim->im.cand_screen = (*syms->x_im_candidate_screen_new)( uim->im.disp , uim->im.font_man , uim->im.color_man , (*uim->im.listener->is_vertical)(uim->im.listener->self) , @@ -847,6 +852,22 @@ if( uim->im.cand_screen) { + /* + * XXX Hack for uim-mozc (1.11.1522.102) + * If candidate_activate() is called with num == 20 and limit = 10, + * uim_get_candidate() on mozc doesn't returns 20 candidates but 10 ones. + * (e.g. uim_get_candidate(0) and uim_get_candidate(10) returns the same.) + */ + if( uim->is_mozc && + uim->im.cand_screen->index != index && + uim->im.cand_screen->index / uim->cand_limit != index / uim->cand_limit && + (index % uim->cand_limit) == 0) + { + candidate_activate( p , + uim->im.cand_screen->num_of_candidates , + uim->cand_limit) ; + } + (*uim->im.cand_screen->select)( uim->im.cand_screen , index) ; } } @@ -1616,6 +1637,8 @@ goto error ; } + uim->is_mozc = (strcmp( engine , "mozc") == 0) ; + uim_set_preedit_cb( uim->context , preedit_clear , preedit_pushback , diff -r ac6ec6344d05 xwindow/x_screen.c --- a/xwindow/x_screen.c +++ b/xwindow/x_screen.c @@ -5268,11 +5268,13 @@ * Callbacks of x_config_event_listener_t events. */ -static char * +static void get_config_intern( x_screen_t * screen , char * dev , /* can be NULL */ - char * key /* can be "error" */ + char * key , /* can be "error" */ + int to_menu , /* -1: don't output to pty and menu. */ + int * flag /* 1(true), 0(false) or -1(other) is returned. */ ) { ml_term_t * term ; @@ -5285,7 +5287,7 @@ if( ( term = (*screen->system_listener->get_pty)( screen->system_listener->self , dev)) == NULL) { - return NULL ; + return ; } } else @@ -5829,7 +5831,34 @@ } } - return value ; + if( to_menu >= 0) + { + if( value == NULL) + { + ml_term_write( screen->term , "#error\n" , 7 , to_menu) ; + + #ifdef __DEBUG + kik_debug_printf( KIK_DEBUG_TAG " #error\n") ; + #endif + } + else + { + ml_term_write( screen->term , "#" , 1 , to_menu) ; + ml_term_write( screen->term , key , strlen( key) , to_menu) ; + ml_term_write( screen->term , "=" , 1 , to_menu) ; + ml_term_write( screen->term , value , strlen( value) , to_menu) ; + ml_term_write( screen->term , "\n" , 1 , to_menu) ; + + #ifdef __DEBUG + kik_debug_printf( KIK_DEBUG_TAG " #%s=%s\n" , key , value) ; + #endif + } + } + + if( flag) + { + *flag = value ? true_or_false( value) : -1 ; + } } static void @@ -5840,31 +5869,7 @@ int to_menu ) { - x_screen_t * screen ; - char * value ; - - screen = p ; - - if( ( value = get_config_intern( screen , dev , key)) == NULL) - { - ml_term_write( screen->term , "#error\n" , 7 , to_menu) ; - - #ifdef __DEBUG - kik_debug_printf( KIK_DEBUG_TAG " #error\n") ; - #endif - } - else - { - ml_term_write( screen->term , "#" , 1 , to_menu) ; - ml_term_write( screen->term , key , strlen( key) , to_menu) ; - ml_term_write( screen->term , "=" , 1 , to_menu) ; - ml_term_write( screen->term , value , strlen( value) , to_menu) ; - ml_term_write( screen->term , "\n" , 1 , to_menu) ; - - #ifdef __DEBUG - kik_debug_printf( KIK_DEBUG_TAG " #%s=%s\n" , key , value) ; - #endif - } + get_config_intern( p , dev , key , to_menu , NULL) ; } static void @@ -8286,18 +8291,21 @@ } else if( strcmp( value , "switch") == 0) { - char * val ; - - if( ( val = get_config_intern( screen , /* dev */ NULL , key))) - { - if( strcmp( val , "true") == 0) - { - value = "false" ; - } - else if( strcmp( val , "false") == 0) - { - value = "true" ; - } + int flag ; + + get_config_intern( screen , /* dev */ NULL , key , -1 , &flag) ; + + if( flag == 1) + { + value = "false" ; + } + else if( flag == 0) + { + value = "true" ; + } + else + { + return 1 ; } } @@ -8312,7 +8320,7 @@ if( ( term = (*screen->system_listener->get_pty)( screen->system_listener->self , dev)) == NULL) { - return 0 ; + return 1 ; } } else @@ -8838,7 +8846,7 @@ } else { - return 0 ; + return 1 ; } usascii_font_cs_changed( screen , ml_term_get_encoding( screen->term)) ;