Mercurial > kinput2.yaz
diff lib/imlib/im.h @ 0:92745d501b9a
initial import from kinput2-v3.1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 04:44:30 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/imlib/im.h Mon Mar 08 04:44:30 2010 +0900 @@ -0,0 +1,269 @@ +/* $Id: im.h,v 1.13 2002/01/27 11:33:06 ishisone Exp $ */ +/* + * Copyright (c) 1994 Software Research Associates, Inc. + * + * Permission to use, copy, modify, and distribute this software and its + * documentation for any purpose and without fee is hereby granted, provided + * that the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Software Research Associates not be + * used in advertising or publicity pertaining to distribution of the + * software without specific, written prior permission. Software Research + * Associates makes no representations about the suitability of this software + * for any purpose. It is provided "as is" without express or implied + * warranty. + * + * Author: Makoto Ishisone, Software Research Associates, Inc., Japan + */ + +#ifndef _im_h +#define _im_h + +#include <stdio.h> +#include <X11/IntrinsicP.h> +#include <X11/StringDefs.h> +#include <X11/Xos.h> +#include <X11/Xfuncs.h> + +/* macros defined in the system header file cause problem... */ +#undef major +#undef minor + +#define EXT_DEBUG_VAR debug_IMProtocol +#include "DebugPrint.h" +#include "AsyncErr.h" +#include "FontBank.h" +#include "ConvCtrl.h" + +#include "imprtype.h" +#include "imbuf.h" +#include "imxport.h" +#include "imconst.h" + +/* + * Restrictions of attributes + */ + +#define MIN_LINE_SPACING 2 +#define MIN_AREA_WIDTH 16 +#define MIN_AREA_HEIGHT 10 + +/* + * IMDispatcher -- request dispatcher + */ + +typedef int (*IMDispatcher)(); + + +/* + * IMConnection + */ + +typedef struct _im_connection_ { + /* protocol information */ + int major_protocol_version; + int minor_protocol_version; +#ifdef XIM_BC + int has_length_bug; +#endif + int serial; /* connection serial # (for debug) */ + Widget proto_widget; /* protocol handler widget */ + + /* transport information */ + IMTransport transport; + + int byte_order; /* byte order of the client */ +#define ORDER_UNKNOWN 0 /* order is yet unknown */ +#define ORDER_BIG 1 /* big endian */ +#define ORDER_LITTLE 2 /* little endian */ + + /* communication buffer */ + IMBuffer in_buf; /* input buffer */ + IMBuffer out_buf; /* output buffer */ +#define IM_INBUF(conn) (&(conn)->in_buf) +#define IM_OUTBUF(conn) (&(conn)->out_buf) + + IMDispatcher dispatcher; /* request dispatch procedure */ + + struct _im_im_ *im_list; /* list of IMs on this connection */ + +#ifdef notyet + /* authentication information */ + IMAuth *server_auth; /* server authentication data */ + IMAuth *client_auth; /* client authentication data */ +#endif /* notyet */ + + /* scheduler */ + int schedule; /* type of operation to be performed */ +#define SCHED_WRITE 1 /* flush output buffer */ +#define SCHED_CLOSE 2 /* close down connection gently */ +#define SCHED_SHUTDOWN 4 /* force shut down */ + struct _im_connection_ *queue_next; /* output/close/shutdown queue */ + + struct _im_connection_ *next; +} IMConnection; + + +/* + * IMConverter -- information on the conversion engine + */ +typedef struct { + char **supported_locales; /* list of supported locales */ + int num_locales; + WidgetClass input_object_class; + WidgetClass display_object_class; +} IMConverter; + + +/* + * IMTriggerKey -- conversion trigger key specification + */ +typedef struct { + KeySym keysym; + long modifiers; + long check_modifiers; +} IMTriggerKey; + + +/* + * IMExtensionMask -- bit mask of enabled extensions + */ +typedef unsigned long IMExtensionMask; /* holds up to 32 extensions */ + + +/* + * IMIM -- per-IM structure + */ + +typedef struct _im_im_ { + unsigned int id; /* input-method ID */ + IMConnection *connection; /* connection this IM is on */ + struct _im_im_ *next; + struct _im_im_ *hash_next; /* for hash table */ + IMConverter *converter; /* conversion engine */ + IMExtensionMask mask; /* enabled extensions */ + struct _im_ic_ *ic_list; /* list of all ICs belonging to this IM */ +} IMIM; + + +/* + * IMAttributes and IMPSAttributes -- IC attributes structure + */ + +typedef struct { + unsigned long set_mask; /* shows attrs that have been set */ + unsigned long change_mask; /* shows attrs that have changed */ +#define ATTR_MASK_INPUT_STYLE (1<<0) +#define ATTR_MASK_CLIENT (1<<1) +#define ATTR_MASK_FOCUS (1<<2) +#define ATTR_MASK_PREEDIT_STATE (1<<3) +#define ATTR_MASK_RESET_STATE (1<<4) + XIMStyle input_style; + Window client; /* client window */ + Window focus; /* focus window */ + unsigned long preedit_state; + unsigned long reset_state; +} IMCommonAttributes; + +typedef struct { + unsigned long set_mask; /* shows attrs that have been set */ + unsigned long change_mask; /* shows attrs that have changed */ +#define ATTR_MASK_AREA (1<<0) +#define ATTR_MASK_FOREGROUND (1<<1) +#define ATTR_MASK_BACKGROUND (1<<2) +#define ATTR_MASK_COLORMAP (1<<3) +#define ATTR_MASK_STD_COLORMAP (1<<4) +#define ATTR_MASK_BG_PIXMAP (1<<5) +#define ATTR_MASK_LINESPACE (1<<6) +#define ATTR_MASK_CURSOR (1<<7) +#define ATTR_MASK_AREA_NEEDED (1<<8) +#define ATTR_MASK_FONT_SET (1<<9) +#define ATTR_MASK_SPOT_LOCATION (1<<10) + XRectangle area; + Pixel foreground, background; + Colormap colormap; + Atom std_colormap; + Pixmap bg_pixmap; + Position line_space; + Cursor cursor; + XRectangle area_needed; /* width/height member are unused */ + String font_set; + XPoint spot_location; /* not used by status attr. */ +} IMPSAttributes; + + +/* + * IMPendingEvent -- record of delayed processing event + */ + +typedef struct _im_pending_event_ { + struct _im_ic_ *ic; + int synchronous; + XEvent event; + struct _im_pending_event_ *next; +} IMPendingEvent; + + +/* + * IMWindowProfile -- information about window + */ + +typedef struct { + Dimension width; + Dimension height; + Window root; +} IMWindowProfile; + + +/* + * IMIC -- per-IC structure + */ + +typedef struct _im_ic_ { + unsigned int id; /* input-context ID */ + IMIM *im; /* IM this IC belongs to */ + Widget conversion; /* conversion widget attached + * to this IC */ + struct _im_ic_ *next; + struct _im_ic_ *hash_next; /* for hash list */ + int state; /* current IC state */ +#define IC_SYNCING 0x01 /* waiting for SYNC_REPLY message */ +#define IC_CONVERTING 0x02 /* in conversion mode */ +#define IC_RESETTING 0x04 /* in resetting */ +#define IC_FORWARDING 0x08 /* in forward event */ +#define IC_IN_PREEDIT 0x10 /* in preedit (on-the-spot only) */ +#define IC_IN_STATUS 0x20 /* in status (on-the-spot only) */ +#define IC_DESTROYING 0x40 /* in process of IC destruction */ + IMPendingEvent *pending_events; /* pending events */ + int style; /* input style */ +#define IMSTYLE_SEPARATE 0 /* root window style */ +#define IMSTYLE_OVER_THE_SPOT 1 /* over-the-spot style */ +#define IMSTYLE_OFF_THE_SPOT 2 /* off-the-spot style */ +#define IMSTYLE_ON_THE_SPOT 3 /* on-the-spot style */ + IMCommonAttributes common_attr; /* general attributes */ + IMPSAttributes preedit_attr; /* preedit specific attributes */ + IMPSAttributes status_attr; /* status specific attributes */ + IMWindowProfile client_profile; /* client widow profile */ + IMWindowProfile focus_profile; /* focus window profile */ + XFontStruct **fonts; + int num_fonts; + XFontStruct **status_fonts; + int num_status_fonts; +} IMIC; + + +/* + * IM and IC hash table size + */ + +#define IM_HASH_SIZE 32 +#define IC_HASH_SIZE 128 + + +/* + * Public function declarations + */ + +#include "imfuncs.h" + +#endif /* _im_h */