diff options
-rw-r--r-- | runtime/doc/options.txt | 4 | ||||
-rw-r--r-- | src/gui.c | 3 | ||||
-rw-r--r-- | src/gui_w48.c | 41 | ||||
-rw-r--r-- | src/proto/gui_w16.pro | 1 | ||||
-rw-r--r-- | src/proto/gui_w32.pro | 1 | ||||
-rw-r--r-- | src/version.c | 2 |
6 files changed, 51 insertions, 1 deletions
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index a439234987..c3cc0871c4 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -3560,6 +3560,10 @@ A jump table for the options with a short description can be found at |Q_op|. to set 'guifontwide' at all unless you want to override the choice made by Pango/Xft. + Windows +multibyte only: *guifontwide_win_mbyte* + + If set and vaild, 'guifontwide' is used for IME instead of 'guifont'. + *'guiheadroom'* *'ghr'* 'guiheadroom' 'ghr' number (default 50) global @@ -1002,6 +1002,9 @@ gui_get_wide_font() else #endif gui.wide_font = font; +#ifdef FEAT_GUI_MSWIN + gui_mch_wide_font_changed(); +#endif return OK; } #endif diff --git a/src/gui_w48.c b/src/gui_w48.c index 1d380fbf93..0a7f367e87 100644 --- a/src/gui_w48.c +++ b/src/gui_w48.c @@ -323,10 +323,15 @@ static void TrackUserActivity __ARGS((UINT uMsg)); /* * For control IME. + * + * These LOGFONT used for IME. */ #ifdef FEAT_MBYTE # ifdef USE_IM_CONTROL +/* holds LOGFONT for 'guifontwide' if available, otherwise 'guifont' */ static LOGFONT norm_logfont; +/* holds LOGFONT for 'guifont' always. */ +static LOGFONT sub_logfont; # endif #endif @@ -3090,6 +3095,39 @@ logfont2name(LOGFONT lf) return res; } + +#ifdef FEAT_MBYTE_IME +/* + * Set correct LOGFONT to IME. Use 'guifontwide' if available, otherwise use + * 'guifont' + */ + static void +update_im_font() +{ + LOGFONT lf_wide; + + if (p_guifontwide != NULL && *p_guifontwide != NUL + && get_logfont(&lf_wide, p_guifontwide, NULL, TRUE) == OK) + norm_logfont = lf_wide; + else + norm_logfont = sub_logfont; + im_set_font(&norm_logfont); +} +#endif + +#ifdef FEAT_MBYTE +/* + * Handler of gui.wide_font (p_guifontwide) changed notification. + */ + void +gui_mch_wide_font_changed() +{ +# ifdef FEAT_MBYTE_IME + update_im_font(); +# endif +} +#endif + /* * Initialise vim to use the font with the given name. * Return FAIL if the font could not be loaded, OK otherwise. @@ -3112,9 +3150,10 @@ gui_mch_init_font(char_u *font_name, int fontset) font_name = lf.lfFaceName; #if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME) norm_logfont = lf; + sub_logfont = lf; #endif #ifdef FEAT_MBYTE_IME - im_set_font(&lf); + update_im_font(); #endif gui_mch_free_font(gui.norm_font); gui.norm_font = font; diff --git a/src/proto/gui_w16.pro b/src/proto/gui_w16.pro index c8cb06590d..4c53fad305 100644 --- a/src/proto/gui_w16.pro +++ b/src/proto/gui_w16.pro @@ -50,6 +50,7 @@ void gui_mch_delete_lines __ARGS((int row, int num_lines)); void gui_mch_insert_lines __ARGS((int row, int num_lines)); void gui_mch_exit __ARGS((int rc)); int gui_mch_init_font __ARGS((char_u *font_name, int fontset)); +void gui_mch_wide_font_changed __ARGS((void)); int gui_mch_maximized __ARGS((void)); void gui_mch_newfont __ARGS((void)); void gui_mch_settitle __ARGS((char_u *title, char_u *icon)); diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro index 49690b03e4..405dd2859a 100644 --- a/src/proto/gui_w32.pro +++ b/src/proto/gui_w32.pro @@ -50,6 +50,7 @@ void gui_mch_delete_lines __ARGS((int row, int num_lines)); void gui_mch_insert_lines __ARGS((int row, int num_lines)); void gui_mch_exit __ARGS((int rc)); int gui_mch_init_font __ARGS((char_u *font_name, int fontset)); +void gui_mch_wide_font_changed __ARGS((void)); int gui_mch_maximized __ARGS((void)); void gui_mch_newfont __ARGS((void)); void gui_mch_settitle __ARGS((char_u *title, char_u *icon)); diff --git a/src/version.c b/src/version.c index a3351c3d0d..b60be3cd38 100644 --- a/src/version.c +++ b/src/version.c @@ -726,6 +726,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 782, +/**/ 781, /**/ 780, |