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
The input driver @c minput_gui_driver is provided for internal
input methods that is useful on window systems. It displays
preedit text and status text at the inputting spot. See the
- documentation of @c minput_gui_driver for more detail.
+ documentation of @c minput_gui_driver for more details.
In the m17n-X library, the foreign input method of name @c Mxim is
provided. It uses XIM (X Input Method) as a background input
engine. The symbol @c Mxim has a property @c Minput_driver whose
value is a pointer to the input driver @c minput_xim_driver. See
- the documentation of @c minput_xim_driver for more detail. */
+ the documentation of @c minput_xim_driver for more details. */
/***ja
@addtogroup m17nInputMethodWin
- @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤ÎÆþÎϥ᥽¥Ã¥É¤Î¥µ¥Ý¡¼¥È
+ @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤ÎÆþÎϥ᥽¥Ã¥É¤Î¥µ¥Ý¡¼¥È.
- ÆþÎϥɥ饤¥Ð @c minput_gui_driver ¤Ï¡¢¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤ÇÊØÍø¤Ë
- ÍѤ¤¤é¤ì¤ëÆâÉôÆþÎϥ᥽¥Ã¥É¤Î¤¿¤á¤Î¤â¤Î¤Ç¤¢¤ë¡£¤³¤Î¥É¥é¥¤¥Ð¤ÏÆþÎÏ¥¹
- ¥Ý¥Ã¥È¤Ë preedit ¥Æ¥¥¹¥È¤È status ¥Æ¥¥¹¥È¤òɽ¼¨¤¹¤ë¡£¾ÜºÙ¤Ë¤Ä¤¤
- ¤Æ¤Ï @c minput_gui_driver ¤Î¥É¥¥å¥á¥ó¥È¤ò»²¾È¤Î¤³¤È¡£
+ ÆþÎϥɥ饤¥Ð @c minput_gui_driver ¤Ï¡¢
+ ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤ÇÍѤ¤¤é¤ì¤ëÆâÉôÆþÎϥ᥽¥Ã¥ÉÍѤΥɥ饤¥Ð¤Ç¤¢¤ë¡£
+ ¤³¤Î¥É¥é¥¤¥Ð¤ÏÆþÎÏ¥¹¥Ý¥Ã¥È¤Ë preedit ¥Æ¥¥¹¥È¤È status
+ ¥Æ¥¥¹¥È¤òɽ¼¨¤¹¤ë¡£¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï @c minput_gui_driver ¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£
- m17n-X ¥é¥¤¥Ö¥é¥ê¤Ï¡¢@c Mxim ¤È¸À¤¦Ì¾Á°¤ò»ý¤Ä³°ÉôÆþÎϥ᥽¥Ã¥É¤òÄó
- ¶¡¤·¤Æ¤¤¤ë¡£¤³¤ì¤Ï XIM (X Input Method) ¤ò¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÎÆþÎÏ¥¨
- ¥ó¥¸¥ó¤È¤·¤ÆÍøÍѤ¹¤ë¡£¥·¥ó¥Ü¥ë @c Mxim ¤Ï @c Minput_driver ¤È¤¤¤¦
- ¥×¥í¥Ñ¥Æ¥£¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¤½¤ÎÃͤÏÆþÎϥɥ饤¥Ð @c minput_xim_driver
- ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£ ¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï @c minput_xim_driver ¤Î¥É¥¥å
- ¥á¥ó¥È¤ò»²¾È¤Î¤³¤È¡£ */
+ m17n-X ¥é¥¤¥Ö¥é¥ê¤Ï¡¢@c Mxim ¤È¸À¤¦Ì¾Á°¤ò»ý¤Ä³°ÉôÆþÎϥ᥽¥Ã¥É¤òÄ󶡤·¤Æ¤¤¤ë¡£¤³¤ì¤Ï
+ XIM (X Input Method) ¤ò¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤ÎÆþÎÏ¥¨¥ó¥¸¥ó¤È¤·¤ÆÍøÍѤ¹¤ë¡£¥·¥ó¥Ü¥ë
+ @c Mxim ¤Ï @c Minput_driver ¤È¤¤¤¦¥×¥í¥Ñ¥Æ¥£¤ò»ý¤Ã¤Æ¤ª¤ê¡¢¤½¤ÎÃͤÏÆþÎϥɥ饤¥Ð
+ @c minput_xim_driver ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ë¡£ ¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï
+ @c minput_xim_driver ¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£ */
/*=*/
#include <string.h>
#include <ctype.h>
+#include "config.h"
#include "m17n-gui.h"
#include "m17n-misc.h"
#include "internal.h"
win_ic_info->ic_info = (MInputContextInfo *) ic->info;
win_ic_info->frame = frame;
win_ic_info->client.win = win_info->client;
- mwin__window_geometry (frame, win_info->client, win_info->client,
+ (*frame->driver->window_geometry) (frame, win_info->client, win_info->client,
&win_ic_info->client.geometry);
win_ic_info->focus.win = win_info->focus;
- mwin__window_geometry (frame, win_info->focus, win_info->client,
+ (*frame->driver->window_geometry) (frame, win_info->focus, win_info->client,
&win_ic_info->focus.geometry);
- win_ic_info->preedit.win = mwin__create_window (frame, win_info->client);
+ win_ic_info->preedit.win = (*frame->driver->create_window) (frame, win_info->client);
win_ic_info->preedit.control.two_dimensional = 1;
win_ic_info->preedit.control.as_image = 0;
win_ic_info->preedit.control.with_cursor = 1;
win_ic_info->preedit.geometry.x = -1;
win_ic_info->preedit.geometry.y = -1;
- win_ic_info->status.win = mwin__create_window (frame, win_info->client);
+ win_ic_info->status.win = (*frame->driver->create_window) (frame, win_info->client);
win_ic_info->status.control.as_image = 1;
win_ic_info->status.control.enable_bidi = 1;
- win_ic_info->candidates.win = mwin__create_window (frame, win_info->client);
+ win_ic_info->candidates.win = (*frame->driver->create_window) (frame, win_info->client);
win_ic_info->candidates.control.as_image = 1;
ic->info = win_ic_info;
{
MInputGUIContextInfo *win_ic_info = (MInputGUIContextInfo *) ic->info;
MInputContextInfo *ic_info = (MInputContextInfo *) win_ic_info->ic_info;
+ MFrame *frame = win_ic_info->frame;
- mwin__destroy_window (win_ic_info->frame, win_ic_info->preedit.win);
- mwin__destroy_window (win_ic_info->frame, win_ic_info->status.win);
- mwin__destroy_window (win_ic_info->frame, win_ic_info->candidates.win);
+ (*frame->driver->destroy_window) (frame, win_ic_info->preedit.win);
+ (*frame->driver->destroy_window) (frame, win_ic_info->status.win);
+ (*frame->driver->destroy_window) (frame, win_ic_info->candidates.win);
ic->info = ic_info;
(*minput_default_driver.destroy_ic) (ic);
free (win_ic_info);
|| ! 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;
}
}
- mwin__adjust_window (frame, win, geometry, &physical);
+ (*frame->driver->adjust_window) (frame, win, geometry, &physical);
mdraw_text_with_control (frame, win, -x0, -y0, mt, 0, len, control);
}
if (! win_ic_info->preedit.mapped)
{
- mwin__map_window (frame, win_ic_info->preedit.win);
+ (*frame->driver->map_window) (frame, win_ic_info->preedit.win);
win_ic_info->preedit.mapped = 1;
}
win_ic_info->preedit.control.cursor_pos = ic->cursor_pos;
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)
{
if (win_ic_info->candidates.mapped)
{
- mwin__unmap_window (frame, win_ic_info->candidates.win);
+ (*frame->driver->unmap_window) (frame, win_ic_info->candidates.win);
win_ic_info->candidates.mapped = 0;
}
return;
if (! win_ic_info->candidates.mapped)
{
- mwin__map_window (frame, win_ic_info->candidates.win);
+ (*frame->driver->map_window) (frame, win_ic_info->candidates.win);
win_ic_info->candidates.mapped = 1;
}
}
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)
{
if (win_ic_info->preedit.mapped)
{
- mwin__unmap_window (frame, win_ic_info->preedit.win);
+ (*frame->driver->unmap_window) (frame, win_ic_info->preedit.win);
win_ic_info->preedit.mapped = 0;
}
}
{
if (! win_ic_info->status.mapped)
{
- mwin__map_window (frame, win_ic_info->status.win);
+ (*frame->driver->map_window) (frame, win_ic_info->status.win);
win_ic_info->status.mapped = 1;
}
}
{
if (win_ic_info->status.mapped)
{
- mwin__unmap_window (frame, win_ic_info->status.win);
+ (*frame->driver->unmap_window) (frame, win_ic_info->status.win);
win_ic_info->status.mapped = 0;
}
}
{
if (! win_ic_info->candidates.mapped)
{
- mwin__map_window (frame, win_ic_info->candidates.win);
+ (*frame->driver->map_window) (frame, win_ic_info->candidates.win);
win_ic_info->candidates.mapped = 1;
}
}
{
if (win_ic_info->candidates.mapped)
{
- mwin__unmap_window (frame, win_ic_info->candidates.win);
+ (*frame->driver->unmap_window) (frame, win_ic_info->candidates.win);
win_ic_info->candidates.mapped = 0;
}
}
+ else if (command == Minput_reset)
+ {
+ MInputCallbackFunc func;
+
+ if (minput_default_driver.callback_list
+ && (func = ((MInputCallbackFunc)
+ mplist_get_func (minput_default_driver.callback_list,
+ Minput_reset))))
+ {
+ MInputContextInfo *ic_info
+ = (MInputContextInfo *) win_ic_info->ic_info;
+ ic->info = ic_info;
+ (func) (ic, Minput_reset);
+ ic->info = win_ic_info;
+ }
+ if (ic->preedit_changed)
+ minput_callback (ic, Minput_preedit_draw);
+ if (ic->status_changed)
+ minput_callback (ic, Minput_status_draw);
+ if (ic->candidates_changed)
+ minput_callback (ic, Minput_candidates_draw);
+ }
}
static int
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);
+ 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
displays them at the input spot set by the function
minput_set_spot ().
- The function m17n_initialize_win () set the variable @c
- minput_driver to the pointer to this driver so that all internal
- input methods use it.
+ The macro M17N_INIT () set the variable @c minput_driver to the
+ pointer to this driver so that all internal input methods use it.
Therefore, unless @c minput_driver is changed from the default,
the driver dependent arguments to the functions whose name begin
The argument $ARG of the function minput_create_ic () must be a
pointer to the structure @c MInputGUIArgIC. See the documentation
- of @c MInputGUIArgIC for more detail.
+ of @c MInputGUIArgIC for more details.
- If the argument $KEY is @c Mnil, the argument $ARG of the
- function minput_filter () must be a pointer to the object of type
- @c XEvent. In that case, $KEY is generated from $ARG.
+ If the argument $KEY of function minput_filter () is @c Mnil, the
+ argument $ARG must be a pointer to the object of type @c XEvent.
+ In that case, $KEY is generated from $ARG.
The argument $ARG of the function minput_lookup () must be the
same one as that of the function minput_filter (). */
/***ja
- @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤ÎÆâÉôÆþÎϥ᥽¥Ã¥ÉÍÑÆþÎϥɥ饤¥Ð
+ @brief ¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤ÎÆâÉôÆþÎϥ᥽¥Ã¥ÉÍÑÆþÎϥɥ饤¥Ð.
- ÆþÎϥɥ饤¥Ð @c minput_gui_driver ¤Ï¡¢¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤ÇÍѤ¤¤é
- ¤ì¤ëÆþÎϥ᥽¥Ã¥ÉÍѤΤâ¤Î¤Ç¤¢¤ë¡£
+ ÆþÎϥɥ饤¥Ð @c minput_gui_driver
+ ¤Ï¡¢¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¾å¤ÇÍѤ¤¤é¤ì¤ëÆþÎϥ᥽¥Ã¥ÉÍѥɥ饤¥Ð¤Ç¤¢¤ë¡£
- ¤³¤Î¥É¥é¥¤¥Ð¤Ï¡¢´Ø¿ô minput_set_spot () ¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤¿ÆþÎÏ¥¹¥Ý¥Ã
- ¥È¤Ë preedit ¥Æ¥¥¹¥ÈÍѤΥµ¥Ö¥¦¥£¥ó¥É¥¦¤È status ¥Æ¥¥¹¥ÈÍѤΥµ¥Ö
- ¥¦¥£¥ó¥É¥¦¤òºî¤ê¡¢¤½¤ì¤¾¤ì¤òɽ¼¨¤¹¤ë¡£
+ ¤³¤Î¥É¥é¥¤¥Ð¤Ï¡¢´Ø¿ô minput_set_spot () ¤Ë¤è¤Ã¤ÆÀßÄꤵ¤ì¤¿ÆþÎÏ¥¹¥Ý¥Ã¥È¤Ë
+ preedit ¥Æ¥¥¹¥ÈÍѤΥµ¥Ö¥¦¥£¥ó¥É¥¦¤È status
+ ¥Æ¥¥¹¥ÈÍѤΥµ¥Ö¥¦¥£¥ó¥É¥¦¤òºî¤ê¡¢¤½¤ì¤¾¤ì¤òɽ¼¨¤¹¤ë¡£
- ´Ø¿ô m17n_initialize_win () ¤ÏÊÑ¿ô @c minput_driver ¤ò¤³¤Î¥É¥é¥¤¥Ð
- ¤Ø¤Î¥Ý¥¤¥ó¥¿¤ËÀßÄꤷ¡¢Á´¤Æ¤ÎÆâÉôÆþÎϥ᥽¥Ã¥É¤¬¤³¤Î¥É¥é¥¤¥Ð¤ò»È¤¦¤è
- ¤¦¤Ë¤¹¤ë¡£
+ ¥Þ¥¯¥í M17N_INIT () ¤ÏÊÑ¿ô @c minput_driver
+ ¤ò¤³¤Î¥É¥é¥¤¥Ð¤Ø¤Î¥Ý¥¤¥ó¥¿¤ËÀßÄꤷ¡¢Á´¤Æ¤ÎÆâÉôÆþÎϥ᥽¥Ã¥É¤¬¤³¤Î¥É¥é¥¤¥Ð¤ò»È¤¦¤è¤¦¤Ë¤¹¤ë¡£
¤·¤¿¤¬¤Ã¤Æ¡¢@c minput_driver ¤¬¥Ç¥Õ¥©¥ë¥ÈÃͤΤޤޤǤ¢¤ì¤Ð¡¢minput_
- ¤Ç»Ï¤Þ¤ë̾Á°¤ò»ý¤Ä°Ê²¼¤Î´Ø¿ô·²¤Î¥É¥é¥¤¥Ð¤Ë°Í¸¤¹¤ë°ú¿ô¤Ï¼¡¤Î¤è¤¦¤Ë
- ¤Ê¤ë¡£
+ ¤Ç»Ï¤Þ¤ë̾Á°¤ò»ý¤Ä´Ø¿ô¤Î°ú¿ô¤Î¤¦¤Á¥É¥é¥¤¥Ð°Í¸¤Î¤â¤Î¤Ï°Ê²¼¤Î¤è¤¦¤Ë¤Ê¤ë¡£
´Ø¿ô minput_open_im () ¤Î°ú¿ô $ARG ¤Ï̵»ë¤µ¤ì¤ë¡£
- ´Ø¿ô minput_create_ic () ¤Î°ú¿ô $ARG ¤Ï¹½Â¤ÂÎ @c MInputGUIArgIC ¤Ø
- ¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï @c MInputGUIArgIC ¤Î
- ¥É¥¥å¥á¥ó¥È¤ò»²¾È¤Î¤³¤È¡£
+ ´Ø¿ô minput_create_ic () ¤Î°ú¿ô $ARG ¤Ï¹½Â¤ÂÎ @c MInputGUIArgIC
+ ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¾ÜºÙ¤Ë¤Ä¤¤¤Æ¤Ï @c MInputGUIArgIC
+ ¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£
- ´Ø¿ô minput_filter () ¤Î°ú¿ô $ARG ¤¬ @c Mnil ¤Î¾ì¹ç¡¢ $ARG ¤Ï
- XEvent ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤³¤Î¾ì¹ç $KEY
- ¤Ï $ARG ¤«¤éÀ¸À®¤µ¤ì¤ë¡£
+ ´Ø¿ô minput_filter () ¤Î°ú¿ô $ARG ¤¬ @c Mnil ¤Î¾ì¹ç¡¢ $ARG ¤Ï @c
+ XEvent ·¿¤Î¥ª¥Ö¥¸¥§¥¯¥È¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£¤³¤Î¾ì¹ç
+ $KEY ¤Ï $ARG ¤«¤éÀ¸À®¤µ¤ì¤ë¡£
- ´Ø¿ô minput_lookup () ¤Î°ú¿ô $ARG ¤Ï´Ø¿ô minput_filter () °ú¿ô
+ ´Ø¿ô minput_lookup () ¤Î°ú¿ô $ARG ¤Ï´Ø¿ô minput_filter () ¤Î°ú¿ô
$ARG ¤ÈƱ¤¸¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤é¤Ê¤¤¡£ */
MInputDriver minput_gui_driver;
/*=*/
/***en
+ @brief Symbol of the name "xim".
+
+ The variable Mxim is a symbol of name "xim". It is a name of the
+ input method driver #minput_xim_driver. */
+/***ja
+ @brief "xim"¤ò̾Á°¤È¤·¤Æ»ý¤Ä¥·¥ó¥Ü¥ë .
+
+ ÊÑ¿ô Mxim ¤Ï"xim"¤ò̾Á°¤È¤·¤Æ»ý¤Ä¥·¥ó¥Ü¥ë¤Ç¤¢¤ë¡£"xim"
+ ¤ÏÆþÎϥ᥽¥Ã¥É¥É¥é¥¤¥Ð #minput_xim_driver ¤Î̾Á°¤Ç¤¢¤ë¡£ */
+
+MSymbol Mxim;
+
+/*=*/
+
+/***en
@brief Convert an event to an input key.
The minput_event_to_key () function returns the input key
corresponding to event $EVENT on $FRAME by a window system
dependent manner.
- In the m17n-X library, $EVENT must be a pointer to the struct @c
- XKeyEvent, and it is handled as below.
+ In the m17n-X library, $EVENT must be a pointer to the structure
+ @c XKeyEvent, and it is handled as below.
At first, the keysym name of $EVENT is acquired by the function @c
- XKeysymToString.
-
- Then, the name is modified as below.
+ XKeysymToString. Then, the name is modified as below.
If the name is one of "a" .. "z" and $EVENT has a Shift modifier,
the name is converted to "A" .. "Z" respectively, and the Shift
the byte is bitwise anded by 0x1F and the Control modifier is
cleared.
- If $EVENT still has Shift, Control, Meta, Alt, Super, and/or Hyper
- modifiers, the name is prepended by "S-", "C-", "M-", "A-", "s-",
- and/or "H-" respectively in this order.
+ If $EVENT still has modifiers, the name is preceded by "S-"
+ (Shift), "C-" (Control), "M-" (Meta), "A-" (Alt), "s-" (Super),
+ and/or "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. */
/***ja
- @brief ¥¡¼Ì¾¾Î¤òÆþÎÏ¥¡¼¤ËÊÑ´¹¤¹¤ë
-
- ´Ø¿ô minput_name_to_key () ¤Ï¡¢Ì¾Á° $NAME ¤ËÂбþ¤¹¤ëÆþÎÏ¥¡¼¤òÊÖ¤¹¡£
-
- $NAME ¤Ï¼¡¤Î·Á¤ò¤È¤ë¡£
-
- [ MODIFIER-MNEMONIC '-' ] * KEY-NAME
-
- ¤³¤³¤Ç MODIFIER-MNEMONIC ¤Ï 'S', 'C', 'M', 'A', 's', 'H' ¤Î¤¤¤º¤ì
- ¤«¤Ç¤¢¤ê¡¢¤½¤ì¤¾¤ì Shift, Control, Meta, Alt, Super, Hyper ¤Î³Æ¥â
- ¥Ç¥£¥Õ¥¡¥¤¥¢¤ò¼¨¤¹¡£KEY-NAME ¤ÏÆþÎÏ¥¡¼¤Î¥·¥ó¥Ü¥ê¥Ã¥¯¤Ê̾Á°¤òɽ¤¹Ê¸»úÎó¡£
-
- ÆþÎÏ¥¡¼¤Î²¼ 16 ¥Ó¥Ã¥È¤Ï "keysym bits" ¤È¤è¤Ð¤ì¡¢KEY-NAME ¤ËÂбþ¤¹
- ¤ë¥³¡¼¥É¤òɽ¤¹¡£¾å7 bits (¤Ä¤Þ¤ê 17 ¥Ó¥Ã¥ÈÌܤ«¤é 23 ¥Ó¥Ã¥ÈÌܤޤÇ)
- ¤Ï"modifier bits" ¤È¸Æ¤Ð¤ì¡¢MODIFIER-MNEMONIC ¤òɽ¸½¤·¤Æ¤¤¤ë¡£
+ @brief ¥¤¥Ù¥ó¥È¤òÆþÎÏ¥¡¼¤ËÊÑ´¹¤¹¤ë.
- KEY-NAME ¤¬ 1 ¥Ð¥¤¥ÈŤǤ¢¤ë¾ì¹ç¡¢ÆþÎÏ¥¡¼¤Ï¼¡¤Î¤è¤¦¤Ë¹½À®¤µ¤ì¤ë¡£
+ ´Ø¿ô minput_event_to_key () ¤Ï¡¢$FRAME ¤Î¥¤¥Ù¥ó¥È $EVENT
+ ¤ËÂбþ¤¹¤ëÆþÎÏ¥¡¼¤òÊÖ¤¹¡£¤³¤³¤Ç¤Î¡ÖÂбþ¡×¤Ï¥¦¥£¥ó¥É¥¦¥·¥¹¥Æ¥à¤Ë°Í¸¤¹¤ë¡£
- ¤Þ¤º¡¢keysym bits ¤Ë¤Ï¤½¤Î¥Ð¥¤¥È¥³¡¼¥É¤½¤Î¤â¤Î¤¬ÀßÄꤵ¤ì¤ë¡£
+ m17n-X ¥é¥¤¥Ö¥é¥ê¤Î¾ì¹ç¤Ë¤Ï¡¢$EVENT ¤Ï ¹½Â¤ÂÎ @c XKeyEvent
+ ¤Ø¤Î¥Ý¥¤¥ó¥¿¤Ç¤¢¤ê¡¢¼¡¤Î¤è¤¦¤Ë½èÍý¤µ¤ì¤ë¡£
- ¼¡¤¤¤Ç¡¢Shift, Control, Meta ¤Î³Æ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤Ï°Ê²¼¤Î¼ê³¤¤Ç
- keysym bits ¤ËÈ¿±Ç¤µ¤ì¤ë¡£
+ ¤Þ¤º¡¢´Ø¿ô @c XKeysymToString ¤Ë¤è¤Ã¤Æ¡¢$EVENT ¤Î keysym
+ ̾¤ò¼èÆÀ¤·¡¢¼¡¤¤¤Ç°Ê²¼¤ÎÊѹ¹¤ò²Ã¤¨¤ë¡£
- (1) Shift ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤¬¤¢¤ê¡¢keysym bits ¤¬¾®Ê¸»ú¤Ç¤¢¤ì¤Ð(¤Ä¤Þ
- ¤ê 'a' ¤«¤é 'z' ¤Ç¤¢¤ì¤Ð), Âçʸ»ú (¤Ä¤Þ¤ê 'A' through 'Z') ¤ËÊÑ´¹
- ¤µ¤ì¤ë¡£Shift ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤Ï modifier bits ¤«¤é¼è¤ê½ü¤«¤ì¤ë¡£
+ ̾Á°¤¬ "a" .. "z" ¤Î¤¤¤º¤ì¤«¤Ç¤¢¤Ã¤Æ $EVENT ¤Ë Shift
+ ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤¬¤¢¤ì¤Ð¡¢Ì¾Á°¤Ï¤½¤ì¤¾¤ì "A" .. "Z" ¤ËÊÑ´¹¤µ¤ì¡¢Shift
+ ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤Ï¼è¤ê½ü¤«¤ì¤ë¡£
- (2) Control ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤¬¤¢¤ì¤Ð, keysym bits ¤Ï¥Ó¥Ã¥Èñ°Ì¤Ç
- 0x1F ¤È and ±é»»¤ò¹Ô¤¦¡£Control ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤Ï modifier bits
- ¤«¤é¼è¤ê½ü¤«¤ì¤ë¡£
+ ̾Á°¤¬£±¥Ð¥¤¥ÈĹ¤Ç $EVENT ¤Ë Control ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤¬¤¢¤ì¤Ð¡¢Ì¾Á°¤È
+ 0x1F ¤È¤ò¥Ó¥Ã¥Èñ°Ì¤Ç and ±é»»¤·¡¢Control ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤Ï¼è¤ê½ü¤«¤ì¤ë¡£
- (3) Meta ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤¬¤¢¤ì¤Ð, keysym bits ¤Ï¥Ó¥Ã¥Èñ°Ì¤Ç 0x80
- ¤È or ±é»»¤ò¹Ô¤¦¡£ Meta ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤Ï modifier bits ¤«¤é¼è¤ê½ü
- ¤«¤ì¤ë¡£
+ ¤½¤ì¤Ç¤â $EVENT ¤Ë¤Þ¤À¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤¬¤¢¤ì¤Ð¡¢Ì¾Á°¤ÎÁ°¤Ë¤½¤ì¤¾¤ì
+ "S-" (Shift), "C-" (Control), "M-" (Meta), "A-" (Alt), "s-"
+ (Super), "H-" (Hyper)¤¬¤³¤Î½çÈÖ¤ÇÉÕ¤¯¡£
+
+ ¤¿¤È¤¨¤Ð¡¢keysym ̾¤¬ "a" ¤Ç¥¤¥Ù¥ó¥È¤¬ Shift, Meta, and Hyper
+ ¥â¥Ç¥£¥Õ¥¡¥¤¥¢¤ò»ý¤Æ¤Ð¡¢ÆÀ¤é¤ì¤ë̾Á°¤Ï "M-H-A" ¤Ç¤¢¤ë¡£
- ¤¿¤È¤¨¤Ð¡¢"S-a" ¤È "A" ¤Ï¤É¤Á¤é¤â 65 ¤ò¡¢"C-a" ¤È "C-A" ¤Ï¤É¤Á¤é¤â
- 1 ¤òÊÖ¤·¡¢"M-a" ¤Ï 225 ¤ò, "C-M-a" ¤Ï 129 ¤òÊÖ¤¹¡£
+ ºÇ¸å¤Ë¤½¤Î̾Á°¤ò»ý¤Ä¥·¥ó¥Ü¥ë¤òÊÖ¤¹¡£*/
- KEY-NAME ¤¬ 2 ¥Ð¥¤¥È°Ê¾å¤Ç¤¢¤ë»þ¤Ë¤Ï¡¢Âбþ¤¹¤ëkeysym bits ¤Ï@c
- m17n @c ¥é¥¤¥Ö¥é¥ê ÆâÉô¤Î¥Æ¡¼¥Ö¥ë¤Ë¤è¤Ã¤ÆÆÀ¤ë»ö¤¬¤Ç¤¤ë¡£¤³¤Î¤È¤
- ¥Æ¡¼¥Ö¥ë¤Ë KEY-NAME ¤¬¤Ê¤±¤ì¤Ð¡¢¤³¤Î´Ø¿ô¤Ï -1 ¤òÊÖ¤¹¡£ */
MSymbol
minput_event_to_key (MFrame *frame, void *event)
{
int modifiers;
- MSymbol key = mwin__parse_event (frame, event, &modifiers);
+ MSymbol key;
char *name, *str;
+ M_CHECK_READABLE (frame, MERROR_IM, Mnil);
+ key = (*frame->driver->parse_event) (frame, event, &modifiers);
if (! modifiers)
return key;