]> granicus.if.org Git - vim/commitdiff
patch 8.0.1344: using 'imactivatefunc' in the GUI does not work v8.0.1344
authorBram Moolenaar <Bram@vim.org>
Sun, 26 Nov 2017 13:56:16 +0000 (14:56 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 26 Nov 2017 13:56:16 +0000 (14:56 +0100)
Problem:    Using 'imactivatefunc' in the GUI does not work.
Solution:   Do not use 'imactivatefunc' and 'imstatusfunc' in the GUI.

runtime/doc/options.txt
src/mbyte.c
src/testdir/test_iminsert.vim
src/version.c

index f84421363083fc8e1cdb4b60aec8508f48212099..c4ceb5f39c4125391482cc1e3d7ca68d03af4066 100644 (file)
@@ -4258,8 +4258,8 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {not in Vi}
                        {only available when compiled with |+mbyte|}
        This option specifies a function that will be called to
-       activate/inactivate Input Method.
-       Does not work in the MS-Windows GUI version.
+       activate or deactivate the Input Method.
+       It is not used in the GUI.
 
        Example: >
                function ImActivateFunc(active)
@@ -4375,7 +4375,7 @@ A jump table for the options with a short description can be found at |Q_op|.
                        {only available when compiled with |+mbyte|}
        This option specifies a function that is called to obtain the status
        of Input Method.  It must return a positive number when IME is active.
-       Does not work in the MS-Windows GUI version.
+       It is not used in the GUI.
 
        Example: >
                function ImStatusFunc()
index 3ebd183c9991d5f9e943d8aa0533ef4f7ee6718f..408c49ad7920c8fd03a584de638854a06c569fa2 100644 (file)
@@ -4782,6 +4782,14 @@ iconv_end(void)
 
 #endif /* FEAT_MBYTE */
 
+#ifdef FEAT_GUI
+# define USE_IMACTIVATEFUNC (!gui.in_use && *p_imaf != NUL)
+# define USE_IMSTATUSFUNC (!gui.in_use && *p_imsf != NUL)
+#else
+# define USE_IMACTIVATEFUNC (*p_imaf != NUL)
+# define USE_IMSTATUSFUNC (*p_imsf != NUL)
+#endif
+
 #ifdef FEAT_EVAL
     static void
 call_imactivatefunc(int active)
@@ -5689,7 +5697,7 @@ im_synthesize_keypress(unsigned int keyval, unsigned int state)
 xim_reset(void)
 {
 #ifdef FEAT_EVAL
-    if (p_imaf[0] != NUL)
+    if (USE_IMACTIVATEFUNC)
        call_imactivatefunc(im_is_active);
     else
 #endif
@@ -5868,7 +5876,7 @@ xim_queue_key_press_event(GdkEventKey *event, int down)
 im_get_status(void)
 {
 #  ifdef FEAT_EVAL
-    if (p_imsf[0] != NUL)
+    if (USE_IMSTATUSFUNC)
        return call_imstatusfunc();
 #  endif
     return im_is_active;
@@ -5908,16 +5916,14 @@ im_set_active(int active_arg)
     /* If 'imdisable' is set, XIM is never active. */
     if (p_imdisable)
        active = FALSE;
-#  if !defined(FEAT_GUI_GTK)
     else if (input_style & XIMPreeditPosition)
        /* There is a problem in switching XIM off when preediting is used,
         * and it is not clear how this can be solved.  For now, keep XIM on
         * all the time, like it was done in Vim 5.8. */
        active = TRUE;
-#  endif
 
 #  if defined(FEAT_EVAL)
-    if (p_imaf[0] != NUL)
+    if (USE_IMACTIVATEFUNC)
     {
        if (active != im_get_status())
        {
@@ -6328,7 +6334,8 @@ xim_real_init(Window x11_window, Display *x11_display)
     }
     else
     {
-       EMSG(_(e_xim));
+       if (!is_not_a_term())
+           EMSG(_(e_xim));
        XCloseIM(xim);
        return FALSE;
     }
@@ -6348,7 +6355,7 @@ xim_real_init(Window x11_window, Display *x11_display)
 im_get_status(void)
 {
 #  ifdef FEAT_EVAL
-    if (p_imsf[0] != NUL)
+    if (USE_IMSTATUSFUNC)
        return call_imstatusfunc();
 #  endif
     return xim_has_focus;
@@ -6480,7 +6487,7 @@ static int im_was_set_active = FALSE;
 im_get_status()
 {
 #  ifdef FEAT_EVAL
-    if (p_imsf[0] != NUL)
+    if (USE_IMSTATUSFUNC)
        return call_imstatusfunc();
 #  endif
     return im_was_set_active;
@@ -6492,7 +6499,7 @@ im_set_active(int active_arg)
 #  if defined(FEAT_MBYTE) && defined(FEAT_EVAL)
     int            active = !p_imdisable && active_arg;
 
-    if (p_imaf[0] != NUL && active != im_get_status())
+    if (USE_IMACTIVATEFUNC && active != im_get_status())
     {
        call_imactivatefunc(active);
        im_was_set_active = active;
index 0676c03f16d1f035fe64190ba77f6a1b645b119f..142aec0bac6025c8e18242f6732d4c66a46af4db 100644 (file)
@@ -17,9 +17,6 @@ func IM_statusfunc()
 endfunc
 
 func Test_iminsert2()
-  if has('gui_win32')
-    return
-  endif
   set imactivatefunc=IM_activatefunc
   set imstatusfunc=IM_statusfunc
   set iminsert=2
@@ -27,6 +24,8 @@ func Test_iminsert2()
   set iminsert=0
   set imactivatefunc=
   set imstatusfunc=
-  call assert_equal(1, s:imactivatefunc_called)
-  call assert_equal(1, s:imstatusfunc_called)
+
+  let expected = has('gui_running') ? 0 : 1
+  call assert_equal(expected, s:imactivatefunc_called)
+  call assert_equal(expected, s:imstatusfunc_called)
 endfunc
index bcf6a81eb4095702e92f271d1329c347e43d0e9c..f94ef27c01643de0286cbca52a968993167a4e74 100644 (file)
@@ -771,6 +771,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1344,
 /**/
     1343,
 /**/