/* @(#)windowimpl.h 20.83 93/06/28 SMI */ /***********************************************************************/ /* window_impl.h */ /* * (c) Copyright 1989 Sun Microsystems, Inc. Sun design patents * pending in the U.S. and foreign countries. See LEGAL NOTICE * file for terms of the license. */ /***********************************************************************/ #ifndef window_impl_DEFINED #define window_impl_DEFINED #include #include #include #include #define _NOTIFY_MIN_SYMBOLS #include #undef _NOTIFY_MIN_SYMBOLS #include #include /* BUG: try to get rid of win_struct.h */ #include #include #include #include #include #include #include #include #include #ifdef OW_I18N #include #endif #define window_attr_next(attr) (Window_attribute *)attr_next((caddr_t *)attr) /* MAX_FUNC_KEY is maximum number of function keys + number of buttons in the mouse. */ #define MAX_KEYCODE 128 #define BITS_PER_BYTE 8 #define WINDOW_KEYMASK (MAX_KEYCODE/((sizeof(char))* BITS_PER_BYTE)) #define DEFAULT_X_Y 0 #define DEFAULT_WIDTH_HEIGHT 64 /* For the rect of the window */ #define EMPTY_VALUE 0x7fff #define WIN_DEFAULT_RECT(_rect) (((_rect)->r_left == DEFAULT_X_Y) && \ ((_rect)->r_top == DEFAULT_X_Y) && \ ((_rect)->r_width == DEFAULT_WIDTH_HEIGHT) && \ ((_rect)->r_height == DEFAULT_WIDTH_HEIGHT)) #define WIN_PRIVATE(win) XV_PRIVATE(Window_info, Xv_window_struct, win) #define WIN_PUBLIC(win) XV_PUBLIC(win) #define WIN_SET_DEAF(_win_info, flag) (_win_info->deaf = flag) #define WIN_IS_DEAF(_win_info) (_win_info->deaf) #define WIN_SET_LOOP(_win_info, flag) (_win_info->window_loop = flag) #define WIN_IS_LOOP(_win_info) (_win_info->window_loop) #ifdef OW_I18N #define WIN_SET_GRAB(_win_info, flag) (_win_info->active_grab = flag) #define WIN_IS_GRAB(_win_info) (_win_info->active_grab) #define WIN_SET_PASSIVE_GRAB(_win_info, flag) (_win_info->passive_grab = flag) #define WIN_IS_PASSIVE_GRAB(_win_info) (_win_info->passive_grab) #endif /* OW_I18N */ /* windows are in charge of their own borders */ /***********************************************************************/ /* Structures */ /***********************************************************************/ typedef struct window_client_msg { Xv_opaque type; unsigned char format; union { char b[WIN_MESSAGE_DATA_SIZE]; short s[WIN_MESSAGE_DATA_SIZE/sizeof(short)]; int l[WIN_MESSAGE_DATA_SIZE/sizeof(int)]; } data; } Window_client_msg; typedef struct win_drop_site_list { Xv_sl_link next; Xv_drop_site drop_item; } Win_drop_site_list; typedef enum win_drop_site_mode { Win_Drop_Site, Win_Drop_Interest, } Win_drop_site_mode; typedef struct window_info { Xv_Window public_self; /* back pointer to public struct */ int (*layout_proc)(); void (*event_proc)(); void (*notify_safe_event_proc)(); void (*notify_immediate_event_proc)(); struct window_info *owner; Xv_Window parent; Xv_opaque menu; Xv_font font; Xv_Font glyph_font; /* OL glyph font for window's scale */ int desired_width; int desired_height; Xv_Cursor cursor; Xv_Cursor normal_cursor; /* A place to store normal cursor */ /* when switching to busy cursor */ Xv_opaque client_data; Rect cache_rect; unsigned int xmask; /* X event mask */ int scale; char *cmdline; Pixmap background_pixmap; Window_client_msg client_message; /* Client Message Info */ Win_drop_site_list *dropSites; /* Drop sites in the window */ Win_drop_site_list *dropInterest; /* Only used in top-level windows. * Holds the list of drop items. */ /* margin info */ short top_margin; short bottom_margin; short left_margin; short right_margin; short row_height; short column_width; short row_gap; short column_gap; /* flags */ unsigned has_kbd:1; unsigned map:1; /* change to map when ready */ unsigned rect_info:4; /* x, y, width, or height set */ unsigned top_level:1; unsigned top_level_no_decor:1; /* does window have decors */ unsigned created:1; unsigned has_border:1; /* does window have border */ unsigned being_rescaled:1; unsigned input_only:1; /* is the window input only */ unsigned transparent:1; /* is background pixmap=None */ unsigned in_fullscreen_mode:1; /* window in fullscreen mode */ unsigned is_client_pane:1; /* is the window a client pane */ unsigned x_paint_window:1; /* window used for X graphics */ unsigned inherit_colors:1; unsigned no_clipping:1; /* dont set clip rects on repaint */ unsigned collapse_exposures:1; /* colapse expose events */ /* into a single event. */ /* count = 0 */ unsigned collapse_motion_events:1; /* colapse motion events */ unsigned deaf:1; /* is window deaf? */ unsigned window_loop:1; /* is window in window_loop? */ unsigned softkey_flag:1; /* is soft key labels set? */ #ifdef OW_I18N unsigned win_use_im:1; /* does window need an input method? */ unsigned ic_conversion:1; /* is IC conversion on */ unsigned ic_created:1; /* is IC created */ unsigned ic_active:1; /*is IC active? for read-only modes */ unsigned active_grab:1; /* is window in active grab */ unsigned passive_grab:1; /* is window in passive grab */ /* input method data */ XIC xic; /* X Input Context (IC) */ XID ic_focus_win; /* IC focus window */ XID tmp_ic_focus_win; /* temp IC focus window */ char *win_ic_committed; /* mbyte implicit commit string */ wchar_t *win_ic_committed_wcs;/*widec implicit commit string */ XIMCallback start_pecb_struct; /* preedit start callback */ XIMCallback draw_pecb_struct; /* preedit draw callback */ XIMCallback caret_pecb_struct; /* preedit caret callback */ XIMCallback done_pecb_struct; /* preedit done callback */ XIMCallback start_stcb_struct; /* status start callback */ XIMCallback draw_stcb_struct; /* status draw callback */ XIMCallback done_stcb_struct; /* status done callback */ #ifdef FULL_R5 unsigned long x_im_style_mask; /* X input method style mask */ #endif /* FULL_R5 */ #endif /* OW_I18N */ } Window_info; /* * Package private */ #define actual_row_height(win) \ (win->row_height ? win->row_height : \ xv_get(win->font, FONT_DEFAULT_CHAR_HEIGHT)) #ifdef OW_I18N #define actual_column_width(win) \ (win->column_width ? win->column_width : \ xv_get(win->font, FONT_COLUMN_WIDTH)) #else /* OW_I18N */ #define actual_column_width(win) \ (win->column_width ? win->column_width : \ xv_get(win->font, FONT_DEFAULT_CHAR_WIDTH)) #endif /* OW_I18N */ #define actual_rescale_row_height(par,win) \ (win->row_height ? win->row_height : \ xv_get(par->font, FONT_DEFAULT_CHAR_HEIGHT)) #ifdef OW_I18N #define actual_rescale_column_width(par,win) \ (win->column_width ? win->column_width : \ xv_get(par->font, FONT_COLUMN_WIDTH)) #else /* OW_I18N */ #define actual_rescale_column_width(par,win) \ (win->column_width ? win->column_width : \ xv_get(par->font, FONT_DEFAULT_CHAR_WIDTH)) #endif /* OW_I18N */ /* window.c */ Pkg_private Notify_value window_default_event_func(); Xv_private int window_getrelrect(); /* window_set.c */ Pkg_private Xv_opaque window_set_avlist(); Pkg_private int win_appeal_to_owner(); /* window_get.c */ Pkg_private Xv_opaque window_get_attr(); /* window_layout.c */ Pkg_private int window_layout(); /* window_compat.c */ Xv_private void window_scan_and_convert_to_pixels(); /* windowdrop.c */ Pkg_private void win_add_drop_item(); Pkg_private Xv_opaque win_delete_drop_item(); Pkg_private void win_add_drop_interest(); Pkg_private void win_update_dnd_property(); Xv_private Xv_opaque win_get_top_level(); /* windowutil.c */ Xv_private void win_set_wm_command(); Xv_private void win_set_wm_class(); Xv_private int window_set_tree_flag(); Xv_private int window_set_tree_child_flag(); Xv_private int window_set_flag_cursor(); #endif /* ~window_impl_DEFINED */