*** empty log message ***
[m17n/m17n-lib.git] / src / input-gui.c
index 65c379e..9843be9 100644 (file)
@@ -1,5 +1,5 @@
 /* input-gui.c -- gui-based input method module.
-   Copyright (C) 2003, 2004
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
      National Institute of Advanced Industrial Science and Technology (AIST)
      Registration Number H15PRO112
 
@@ -17,7 +17,7 @@
 
    You should have received a copy of the GNU Lesser General Public
    License along with the m17n library; if not, write to the Free
-   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
    02111-1307, USA.  */
 
 /***en
@@ -158,10 +158,8 @@ win_filter (MInputContext *ic, MSymbol key, void *arg)
       || ! ic->active)
     return 0;
 
-  if (key == Mnil)
+  if (key == Mnil && arg)
     {
-      if (! arg)
-       return 0;
       key = minput_event_to_key (win_ic_info->frame, arg);
       if (key == Mnil)
        return 1;
@@ -312,7 +310,7 @@ win_callback (MInputContext *ic, MSymbol command)
       if (ic->im->language != Mnil)
        mtext_put_prop (ic->preedit, 0, mtext_nchars (ic->preedit), Mlanguage,
                        ic->im->language);
-      if (ic->candidate_list)
+      if (ic->candidate_list && ic->candidate_show)
        mtext_push_prop (ic->preedit, ic->candidate_from, ic->candidate_to,
                         Mface, mface_reverse_video);
       if (mtext_nchars (ic->produced) == 0)
@@ -421,23 +419,23 @@ win_callback (MInputContext *ic, MSymbol command)
     }
   else if (command == Minput_set_spot)
     {
-      minput__callback (ic, Minput_preedit_draw);
-      minput__callback (ic, Minput_status_draw);
-      minput__callback (ic, Minput_candidates_draw);
+      minput_callback (ic, Minput_preedit_draw);
+      minput_callback (ic, Minput_status_draw);
+      minput_callback (ic, Minput_candidates_draw);
     }
   else if (command == Minput_toggle)
     {
       if (ic->active)
        {
-         minput__callback (ic, Minput_preedit_done);
-         minput__callback (ic, Minput_status_done);
-         minput__callback (ic, Minput_candidates_done);
+         minput_callback (ic, Minput_preedit_done);
+         minput_callback (ic, Minput_status_done);
+         minput_callback (ic, Minput_candidates_done);
        }
       else
        {
-         minput__callback (ic, Minput_preedit_start);
-         minput__callback (ic, Minput_status_start);
-         minput__callback (ic, Minput_candidates_start);
+         minput_callback (ic, Minput_preedit_start);
+         minput_callback (ic, Minput_status_start);
+         minput_callback (ic, Minput_candidates_start);
        }
     }
   else if (command == Minput_preedit_start)
@@ -489,8 +487,8 @@ win_callback (MInputContext *ic, MSymbol command)
 
       if (minput_default_driver.callback_list
          && (func = ((MInputCallbackFunc)
-                     mplist_get (minput_default_driver.callback_list,
-                                 Minput_reset))))
+                     mplist_get_func (minput_default_driver.callback_list,
+                                      Minput_reset))))
        {
          MInputContextInfo *ic_info
            = (MInputContextInfo *) win_ic_info->ic_info;
@@ -499,11 +497,11 @@ win_callback (MInputContext *ic, MSymbol command)
          ic->info = win_ic_info;
        }
       if (ic->preedit_changed)
-       minput__callback (ic, Minput_preedit_draw);
+       minput_callback (ic, Minput_preedit_draw);
       if (ic->status_changed)
-       minput__callback (ic, Minput_status_draw);
+       minput_callback (ic, Minput_status_draw);
       if (ic->candidates_changed)
-       minput__callback (ic, Minput_candidates_draw);
+       minput_callback (ic, Minput_candidates_draw);
     }
 }
 
@@ -535,20 +533,23 @@ minput__win_init ()
     MPlist *plist = mplist ();
 
     minput_gui_driver.callback_list = plist;
-    plist = mplist_add (plist, Minput_preedit_start, (void *) win_callback);
-    plist = mplist_add (plist, Minput_preedit_draw, (void *) win_callback);
-    plist = mplist_add (plist, Minput_preedit_done, (void *) win_callback);
-    plist = mplist_add (plist, Minput_status_start, (void *) win_callback);
-    plist = mplist_add (plist, Minput_status_draw, (void *) win_callback);
-    plist = mplist_add (plist, Minput_status_done, (void *) win_callback);
-    plist = mplist_add (plist, Minput_candidates_start, (void *) win_callback);
-    plist = mplist_add (plist, Minput_candidates_draw, (void *) win_callback);
-    plist = mplist_add (plist, Minput_candidates_done, (void *) win_callback);
-    plist = mplist_add (plist, Minput_set_spot, (void *) win_callback);
-    plist = mplist_add (plist, Minput_toggle, (void *) win_callback);
-    plist = mplist_add (plist, Minput_reset, (void *) win_callback);
+    mplist_put_func (plist, Minput_preedit_start, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_preedit_draw, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_preedit_done, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_status_start, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_status_draw, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_status_done, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_candidates_start, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_candidates_draw, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_candidates_done, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_set_spot, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_toggle, M17N_FUNC (win_callback));
+    mplist_put_func (plist, Minput_reset, M17N_FUNC (win_callback));
   }
+#if 0
+  /* This will make the caller of minput_method_open() pazzled.  */
   minput_driver = &minput_gui_driver;
+#endif
 
   face_box_prop.width = 1;
   face_box_prop.color_top = face_box_prop.color_left
@@ -682,12 +683,12 @@ MSymbol Mxim;
     the byte is bitwise anded by 0x1F and the Control modifier is
     cleared.
 
-    If $EVENT still has modifiers, the name is preceded by "H-"
-    (Hyper), "s-" (Super), "A-" (Alt), "M-" (Meta), "C-" (Control),
-    and/or "S-" (Shift) in this order.
+    If $EVENT still has modifiers, the name is preceded by "S-"
+    (Shift), "C-" (Control), "M-" (Meta), "A-" (Alt), "G-" (AltGr),
+    "s-" (Super), and "H-" (Hyper) in this order.
 
     For instance, if the keysym name is "a" and the event has Shift,
-    Meta, and Hyper modifiers, the resulting name is "H-M-A".
+    Meta, and Hyper modifiers, the resulting name is "M-H-A".
 
     At last, a symbol who has the name is returned.  */
 
@@ -711,11 +712,11 @@ MSymbol Mxim;
     0x1F ¤È¤ò¥Ó¥Ã¥Èñ°Ì¤Ç and ±é»»¤·¡¢Control ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤Ï¼è¤ê½ü¤«¤ì¤ë¡£
 
     ¤½¤ì¤Ç¤â $EVENT ¤Ë¤Þ¤À¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤¬¤¢¤ì¤Ð¡¢Ì¾Á°¤ÎÁ°¤Ë¤½¤ì¤¾¤ì
-    "H-" (Hyper), "s-" (Super), "A-" (Alt), "M-" (Meta), "C-"
-    (Control), "S-" (Shift) ¤¬¤³¤Î½çÈÖ¤ÇÉÕ¤¯¡£
+    "S-" (Shift), "C-" (Control), "M-" (Meta), "A-" (Alt), , "G-" (AltGr),
+    "s-" (Super), "H-" (Hyper)¤¬¤³¤Î½çÈÖ¤ÇÉÕ¤¯¡£
     
     ¤¿¤È¤¨¤Ð¡¢keysym Ì¾¤¬ "a" ¤Ç¥¤¥Ù¥ó¥È¤¬ Shift, Meta, and Hyper 
-    ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤ò»ý¤Æ¤Ð¡¢ÆÀ¤é¤ì¤ë̾Á°¤Ï "H-M-A" ¤Ç¤¢¤ë¡£
+    ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤ò»ý¤Æ¤Ð¡¢ÆÀ¤é¤ì¤ë̾Á°¤Ï "M-H-A" ¤Ç¤¢¤ë¡£
 
     ºÇ¸å¤Ë¤½¤Î̾Á°¤ò»ý¤Ä¥·¥ó¥Ü¥ë¤òÊÖ¤¹¡£*/
 
@@ -733,7 +734,7 @@ minput_event_to_key (MFrame *frame, void *event)
     return key;
 
   name = msymbol_name (key);
-  str = alloca (strlen (name) + 2 * 6 + 1);
+  str = alloca (strlen (name) + 2 * 8 + 1);
   str[0] = '\0';
   if (modifiers & MINPUT_KEY_SHIFT_MODIFIER)
     strcat (str, "S-");
@@ -743,6 +744,8 @@ minput_event_to_key (MFrame *frame, void *event)
     strcat (str, "M-");
   if (modifiers & MINPUT_KEY_ALT_MODIFIER)
     strcat (str, "A-");
+  if (modifiers & MINPUT_KEY_ALTGR_MODIFIER)
+    strcat (str, "G-");
   if (modifiers & MINPUT_KEY_SUPER_MODIFIER)
     strcat (str, "s-");
   if (modifiers & MINPUT_KEY_HYPER_MODIFIER)