XimintP.h revision 61b2299d
11ab64890Smrg/* $Xorg: XimintP.h,v 1.3 2000/08/17 19:45:05 cpqbld Exp $ */
21ab64890Smrg/******************************************************************
31ab64890Smrg
41ab64890Smrg           Copyright 1991, 1992 by Sun Microsystems, Inc.
51ab64890Smrg           Copyright 1992, 1993, 1994 by FUJITSU LIMITED
61ab64890Smrg           Copyright 1993, 1994       by Sony Corporation
71ab64890Smrg
81ab64890SmrgPermission to use, copy, modify, distribute, and sell this software and
91ab64890Smrgits documentation for any purpose is hereby granted without fee, provided
101ab64890Smrgthat the above copyright notice appear in all copies and that both that
111ab64890Smrgcopyright notice and this permission notice appear in supporting
121ab64890Smrgdocumentation, and that the name of Sun Microsystems, Inc., FUJITSU
131ab64890SmrgLIMITED and Sony Corporation not be used in advertising or publicity
141ab64890Smrgpertaining to distribution of the software without specific, written
151ab64890Smrgprior permission.  Sun Microsystems, Inc., FUJITSU LIMITED and Sony
161ab64890SmrgCorporation makes no representations about the suitability of this
171ab64890Smrgsoftware for any purpose.  It is provided "as is" without express or
1861b2299dSmrgimplied warranty.
191ab64890Smrg
201ab64890SmrgSun Microsystems Inc. ,FUJITSU LIMITED AND SONY CORPORATION DISCLAIMS ALL
211ab64890SmrgWARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
221ab64890SmrgOF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL Sun Microsystems, Inc.,
231ab64890SmrgFUJITSU LIMITED, SONY CORPORATIN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
241ab64890SmrgCONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF
251ab64890SmrgUSE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
261ab64890SmrgOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
271ab64890SmrgPERFORMANCE OF THIS SOFTWARE.
281ab64890Smrg
291ab64890Smrg  Author: Hideki Hiura (hhiura@Sun.COM) Sun Microsystems, Inc.
3061b2299dSmrg          Takashi Fujiwara     FUJITSU LIMITED
311ab64890Smrg                                 fujiwara@a80.tech.yk.fujitsu.co.jp
321ab64890Smrg	  Makoto Wakamatsu     Sony Corporation
331ab64890Smrg                                 makoto@sm.sony.co.jp
341ab64890Smrg	  Hiroyuki Miyamoto    Digital Equipment Corporation
351ab64890Smrg                                 miyamoto@jrd.dec.com
361ab64890Smrg
371ab64890Smrg******************************************************************/
381ab64890Smrg/* $XFree86: xc/lib/X11/XimintP.h,v 1.7 2001/01/17 19:41:49 dawes Exp $ */
391ab64890Smrg
401ab64890Smrg#ifndef _XIMINTP_H
411ab64890Smrg#define _XIMINTP_H
421ab64890Smrg
431ab64890Smrg#include "XimProto.h"
441ab64890Smrg#include "XlcPublic.h"
451ab64890Smrg
461ab64890Smrg/*
471ab64890Smrg * for protocol layer callback function
481ab64890Smrg */
491ab64890Smrgtypedef Bool (*XimProtoIntrProc)(
501ab64890Smrg	Xim, INT16, XPointer, XPointer
511ab64890Smrg);
521ab64890Smrgtypedef struct _XimProtoIntrRec {
531ab64890Smrg    XimProtoIntrProc		 func;
541ab64890Smrg    CARD16			 major_code;
551ab64890Smrg    CARD16			 minor_code;
561ab64890Smrg    XPointer			 call_data;
571ab64890Smrg    struct _XimProtoIntrRec	*next;
581ab64890Smrg} XimProtoIntrRec;
591ab64890Smrg
601ab64890Smrg/*
611ab64890Smrg * for transport layer methods
621ab64890Smrg */
631ab64890Smrgtypedef Bool (*XimTransConnectProc)(
641ab64890Smrg	 Xim
651ab64890Smrg);
661ab64890Smrgtypedef Bool (*XimTransShutdownProc)(
671ab64890Smrg	 Xim
681ab64890Smrg);
691ab64890Smrgtypedef Bool (*XimTransWriteProc)(
701ab64890Smrg	 Xim, INT16, XPointer
711ab64890Smrg);
721ab64890Smrgtypedef Bool (*XimTransReadProc)(
731ab64890Smrg	 Xim, XPointer, int, int *
741ab64890Smrg);
751ab64890Smrgtypedef void (*XimTransFlushProc)(
761ab64890Smrg	 Xim
771ab64890Smrg);
781ab64890Smrgtypedef Bool (*XimTransRegDispatcher)(
791ab64890Smrg	 Xim, Bool (*)(Xim, INT16, XPointer, XPointer), XPointer
801ab64890Smrg);
811ab64890Smrgtypedef Bool (*XimTransCallDispatcher)(
821ab64890Smrg	 Xim, INT16, XPointer
831ab64890Smrg);
841ab64890Smrg
851ab64890Smrg/*
861ab64890Smrg * private part of IM
871ab64890Smrg */
881ab64890Smrgtypedef struct _XimProtoPrivateRec {
891ab64890Smrg    /* The first fields are identical with XimCommonPrivateRec. */
901ab64890Smrg    XlcConv			 ctom_conv;
911ab64890Smrg    XlcConv			 ctow_conv;
921ab64890Smrg    XlcConv			 ctoutf8_conv;
931ab64890Smrg    XlcConv			 cstomb_conv;
941ab64890Smrg    XlcConv			 cstowc_conv;
951ab64890Smrg    XlcConv			 cstoutf8_conv;
961ab64890Smrg    XlcConv			 ucstoc_conv;
971ab64890Smrg    XlcConv			 ucstoutf8_conv;
981ab64890Smrg
991ab64890Smrg    Window			 im_window;
1001ab64890Smrg    XIMID			 imid;
1011ab64890Smrg    CARD16			 unused;
1021ab64890Smrg    XIMStyles			*default_styles;
1031ab64890Smrg    CARD32			*im_onkeylist;
1041ab64890Smrg    CARD32			*im_offkeylist;
1051ab64890Smrg    BITMASK32			 flag;
1061ab64890Smrg
1071ab64890Smrg    BITMASK32			 registed_filter_event;
1081ab64890Smrg    EVENTMASK			 forward_event_mask;
1091ab64890Smrg    EVENTMASK			 synchronous_event_mask;
1101ab64890Smrg
1111ab64890Smrg    XimProtoIntrRec		*intrproto;
1121ab64890Smrg    XIMResourceList		 im_inner_resources;
1131ab64890Smrg    unsigned int		 im_num_inner_resources;
1141ab64890Smrg    XIMResourceList		 ic_inner_resources;
1151ab64890Smrg    unsigned int		 ic_num_inner_resources;
1161ab64890Smrg    char			*hold_data;
1171ab64890Smrg    int				 hold_data_len;
1181ab64890Smrg    char			*locale_name;
1191ab64890Smrg    CARD16			 protocol_major_version;
1201ab64890Smrg    CARD16			 protocol_minor_version;
1211ab64890Smrg    XrmQuark			*saved_imvalues;
1221ab64890Smrg    int				 num_saved_imvalues;
1231ab64890Smrg
1241ab64890Smrg    /*
1251ab64890Smrg     * transport specific
1261ab64890Smrg     */
1271ab64890Smrg    XimTransConnectProc		 connect;
1281ab64890Smrg    XimTransShutdownProc	 shutdown;
1291ab64890Smrg    XimTransWriteProc		 write;
1301ab64890Smrg    XimTransReadProc		 read;
1311ab64890Smrg    XimTransFlushProc		 flush;
1321ab64890Smrg    XimTransRegDispatcher	 register_dispatcher;
1331ab64890Smrg    XimTransCallDispatcher	 call_dispatcher;
1341ab64890Smrg    XPointer			 spec;
1351ab64890Smrg} XimProtoPrivateRec;
1361ab64890Smrg
1371ab64890Smrg/*
1381ab64890Smrg * bit mask for the flag of XIMPrivateRec
1391ab64890Smrg */
1401ab64890Smrg#define SERVER_CONNECTED	(1L)
1411ab64890Smrg#define	DYNAMIC_EVENT_FLOW	(1L << 1)
1421ab64890Smrg#define	USE_AUTHORIZATION_FUNC	(1L << 2)
1431ab64890Smrg#ifdef XIM_CONNECTABLE
1441ab64890Smrg#define DELAYBINDABLE		(1L << 3)
1451ab64890Smrg#define RECONNECTABLE		(1L << 4)
1461ab64890Smrg#endif /* XIM_CONNECTABLE */
1471ab64890Smrg
1481ab64890Smrg/*
1491ab64890Smrg * macro for the flag of XIMPrivateRec
1501ab64890Smrg */
1511ab64890Smrg#define IS_SERVER_CONNECTED(im) \
1521ab64890Smrg		((((Xim)im))->private.proto.flag & SERVER_CONNECTED)
1531ab64890Smrg#define MARK_SERVER_CONNECTED(im) \
1541ab64890Smrg		((((Xim)im))->private.proto.flag |= SERVER_CONNECTED)
1551ab64890Smrg#define UNMARK_SERVER_CONNECTED(im) \
1561ab64890Smrg		((((Xim)im))->private.proto.flag &= ~SERVER_CONNECTED)
1571ab64890Smrg
1581ab64890Smrg#define	IS_DYNAMIC_EVENT_FLOW(im) \
1591ab64890Smrg		(((Xim)im)->private.proto.flag & DYNAMIC_EVENT_FLOW)
1601ab64890Smrg#define	MARK_DYNAMIC_EVENT_FLOW(im) \
1611ab64890Smrg		(((Xim)im)->private.proto.flag |= DYNAMIC_EVENT_FLOW)
1621ab64890Smrg
1631ab64890Smrg#define	IS_USE_AUTHORIZATION_FUNC(im) \
1641ab64890Smrg		(((Xim)im)->private.proto.flag & USE_AUTHORIZATION_FUNC)
1651ab64890Smrg#define	MARK_USE_AUTHORIZATION_FUNC(im) \
1661ab64890Smrg		(((Xim)im)->private.proto.flag |= USE_AUTHORIZATION_FUNC)
1671ab64890Smrg
1681ab64890Smrg#ifdef XIM_CONNECTABLE
1691ab64890Smrg#define IS_DELAYBINDABLE(im) \
1701ab64890Smrg		(((Xim)im)->private.proto.flag & DELAYBINDABLE)
1711ab64890Smrg#define MARK_DELAYBINDABLE(im) \
1721ab64890Smrg		(((Xim)im)->private.proto.flag |= DELAYBINDABLE)
1731ab64890Smrg
1741ab64890Smrg#define IS_RECONNECTABLE(im) \
1751ab64890Smrg		(((Xim)im)->private.proto.flag & RECONNECTABLE)
1761ab64890Smrg#define MARK_RECONNECTABLE(im) \
1771ab64890Smrg		(((Xim)im)->private.proto.flag |= RECONNECTABLE)
1781ab64890Smrg
1791ab64890Smrg#define IS_CONNECTABLE(im) \
1801ab64890Smrg    (((Xim)im)->private.proto.flag & (DELAYBINDABLE|RECONNECTABLE))
1811ab64890Smrg#define UNMAKE_CONNECTABLE(im) \
1821ab64890Smrg    (((Xim)im)->private.proto.flag &= ~(DELAYBINDABLE|RECONNECTABLE))
1831ab64890Smrg#endif /* XIM_CONNECTABLE */
1841ab64890Smrg
1851ab64890Smrg/*
1861ab64890Smrg * bit mask for the register_filter_event of XIMPrivateRec/XICPrivateRec
1871ab64890Smrg */
1881ab64890Smrg#define KEYPRESS_MASK		(1L)
1891ab64890Smrg#define KEYRELEASE_MASK		(1L << 1)
1901ab64890Smrg#define DESTROYNOTIFY_MASK	(1L << 2)
1911ab64890Smrg
1921ab64890Smrgtypedef struct _XimCommitInfoRec {
1931ab64890Smrg    struct _XimCommitInfoRec	*next;
1941ab64890Smrg    char			*string;
1951ab64890Smrg    int				 string_len;
1961ab64890Smrg    KeySym			*keysym;
1971ab64890Smrg    int				 keysym_len;
1981ab64890Smrg} XimCommitInfoRec, *XimCommitInfo;
1991ab64890Smrg
2001ab64890Smrgtypedef struct _XimPendingCallback {
2011ab64890Smrg    int				 major_opcode;
2021ab64890Smrg    Xim				 im;
2031ab64890Smrg    Xic				 ic;
2041ab64890Smrg    char			*proto;
2051ab64890Smrg    int				 proto_len;
2061ab64890Smrg    struct _XimPendingCallback	*next;
2071ab64890Smrg} XimPendingCallbackRec, *XimPendingCallback;
2081ab64890Smrg
2091ab64890Smrg
2101ab64890Smrg/*
2111ab64890Smrg * private part of IC
2121ab64890Smrg */
2131ab64890Smrgtypedef struct _XicProtoPrivateRec {
2141ab64890Smrg    XICID	         icid;			/* ICID		*/
2151ab64890Smrg    CARD16		 dmy;
2161ab64890Smrg    BITMASK32		 flag;			/* Input Mode	*/
2171ab64890Smrg
2181ab64890Smrg    BITMASK32		 registed_filter_event; /* registed filter mask */
2191ab64890Smrg    EVENTMASK		 forward_event_mask;	/* forward event mask */
2201ab64890Smrg    EVENTMASK		 synchronous_event_mask;/* sync event mask */
2211ab64890Smrg    EVENTMASK		 filter_event_mask;	/* negrect event mask */
2221ab64890Smrg    EVENTMASK		 intercept_event_mask;	/* deselect event mask */
2231ab64890Smrg    EVENTMASK		 select_event_mask;	/* select event mask */
2241ab64890Smrg
2251ab64890Smrg    char		*preedit_font;		/* Base font name list */
2261ab64890Smrg    int			 preedit_font_length;	/* length of base font name */
2271ab64890Smrg    char		*status_font;		/* Base font name list */
2281ab64890Smrg    int			 status_font_length;	/* length of base font name */
2291ab64890Smrg
2301ab64890Smrg    XimCommitInfo	 commit_info;
2311ab64890Smrg    XIMResourceList	 ic_resources;
2321ab64890Smrg    unsigned int	 ic_num_resources;
2331ab64890Smrg    XIMResourceList	 ic_inner_resources;
2341ab64890Smrg    unsigned int	 ic_num_inner_resources;
2351ab64890Smrg    XrmQuark		*saved_icvalues;
2361ab64890Smrg    int			 num_saved_icvalues;
2371ab64890Smrg    XimPendingCallback	 pend_cb_que;
2381ab64890Smrg    Bool		 waitCallback;
2391ab64890Smrg} XicProtoPrivateRec ;
2401ab64890Smrg
2411ab64890Smrg/*
2421ab64890Smrg * bit mask for the flag of XICPrivateRec
2431ab64890Smrg */
2441ab64890Smrg#define IC_CONNECTED		(1L)
2451ab64890Smrg#define FABLICATED		(1L << 1)
2461ab64890Smrg#define	NEED_SYNC_REPLY		(1L << 2)
2471ab64890Smrg#define FOCUSED			(1L << 3)
2481ab64890Smrg
2491ab64890Smrg/*
2501ab64890Smrg * macro for the flag of XICPrivateRec
2511ab64890Smrg */
2521ab64890Smrg#define	IS_IC_CONNECTED(ic) \
2531ab64890Smrg		(((Xic)ic)->private.proto.flag & IC_CONNECTED)
2541ab64890Smrg#define	MARK_IC_CONNECTED(ic) \
2551ab64890Smrg		(((Xic)ic)->private.proto.flag |= IC_CONNECTED)
2561ab64890Smrg#define	UNMARK_IC_CONNECTED(ic) \
2571ab64890Smrg		(((Xic)ic)->private.proto.flag &= ~IC_CONNECTED)
2581ab64890Smrg
2591ab64890Smrg#define IS_FABLICATED(ic) \
2601ab64890Smrg		(((Xic)ic)->private.proto.flag & FABLICATED)
2611ab64890Smrg#define MARK_FABLICATED(ic) \
2621ab64890Smrg		(((Xic)ic)->private.proto.flag |= FABLICATED)
2631ab64890Smrg#define UNMARK_FABLICATED(ic) \
2641ab64890Smrg		(((Xic)ic)->private.proto.flag &= ~FABLICATED)
2651ab64890Smrg
2661ab64890Smrg#define	IS_NEED_SYNC_REPLY(ic) \
2671ab64890Smrg		(((Xic)ic)->private.proto.flag & NEED_SYNC_REPLY)
2681ab64890Smrg#define	MARK_NEED_SYNC_REPLY(ic) \
2691ab64890Smrg		(((Xic)ic)->private.proto.flag |= NEED_SYNC_REPLY)
2701ab64890Smrg#define	UNMARK_NEED_SYNC_REPLY(ic) \
2711ab64890Smrg		(((Xic)ic)->private.proto.flag &= ~NEED_SYNC_REPLY)
2721ab64890Smrg
2731ab64890Smrg#define IS_FOCUSED(ic) \
2741ab64890Smrg		(((Xic)ic)->private.proto.flag & FOCUSED)
2751ab64890Smrg#define MARK_FOCUSED(ic) \
2761ab64890Smrg		(((Xic)ic)->private.proto.flag |= FOCUSED)
2771ab64890Smrg#define UNMARK_FOCUSED(ic) \
2781ab64890Smrg		(((Xic)ic)->private.proto.flag &= ~FOCUSED)
2791ab64890Smrg
2801ab64890Smrg/*
2811ab64890Smrg * macro for the filter_event_mask of XICPrivateRec
2821ab64890Smrg */
2831ab64890Smrg#define	IS_NEGLECT_EVENT(ic, mask) \
2841ab64890Smrg		(((Xic)ic)->private.proto.filter_event_mask & (mask))
2851ab64890Smrg
2861ab64890Smrg/*
2871ab64890Smrg * macro for the forward_event_mask of XICPrivateRec
2881ab64890Smrg */
2891ab64890Smrg#define	IS_FORWARD_EVENT(ic, mask) \
2901ab64890Smrg		(((Xic)ic)->private.proto.forward_event_mask & (mask))
2911ab64890Smrg
2921ab64890Smrg/*
2931ab64890Smrg * macro for the synchronous_event_mask of XICPrivateRec
2941ab64890Smrg */
2951ab64890Smrg#define	IS_SYNCHRONOUS_EVENT(ic, mask) \
2961ab64890Smrg   ((((Xic)ic)->private.proto.synchronous_event_mask & (mask)) ? True: False)
2971ab64890Smrg
2981ab64890Smrg#define XIM_MAXIMNAMELEN 64
2991ab64890Smrg#define XIM_MAXLCNAMELEN 64
3001ab64890Smrg
3011ab64890Smrg#endif /* _XIMINTP_H */
302