#ifndef lint #ifdef sccs static char sccsid[] = "@(#)fm_impl.h 20.64 93/06/28"; #endif #endif /***********************************************************************/ /* frame_impl.h/fm_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 _frame_impl_h_already_included #define _frame_impl_h_already_included /* standard includes */ #ifndef FILE #if !defined(SVR4) && !defined(__linux) #undef NULL #endif SVR4 #include #endif FILE #include #ifdef OW_I18N #endif /* OW_I18N */ #include #include #include #include #include /* for WL_ links */ #include /* all this for wmgr.h */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef OW_I18N #include #endif #define FRAME_CLASS_PRIVATE(f) XV_PRIVATE(Frame_class_info, Xv_frame_class, f) #define FRAME_CLASS_PUBLIC(frame) XV_PUBLIC(frame) #define FRAME_PUBLIC(frame) FRAME_CLASS_PUBLIC(frame) #define FRAME_PRIVATE(f) FRAME_CLASS_PRIVATE(f) #define BIT_FIELD(field) unsigned field : 1 /* ACC_XVIEW */ typedef struct frame_menu_accelerator { #ifdef OW_I18N _xv_string_attr_dup_t keystr; #else char *keystr; /* e.g. "Shift+Ctrl+m" */ #endif /* OW_I18N */ short code; /* = event->ie_code */ KeySym keysym; /* X keysym */ void (*notify_proc)(); /* accelerator notify proc */ Xv_opaque data; /* opaque data handle */ unsigned int modifiers; /* state of modifiers */ struct frame_menu_accelerator *next; } Frame_menu_accelerator; typedef struct _frame_a_d{ Xv_opaque menu; Xv_opaque item; }Frame_accel_data; /* ACC_XVIEW */ typedef struct { Frame public_self; /* back pointer to object */ #ifndef OW_I18N char *label; /* string in name stripe & default icon */ #endif Icon icon; Icon default_icon; /* Default Icon */ Frame first_subframe; /* first subframe in list of subframes */ Xv_Window first_subwindow; /* first subwindow in list of subwindows */ Rect rectcache; /* rect of frame (tool relative) */ Rect oldrect; /* quick check if size has changed */ Rect user_rect; /* user position and size */ void (*done_proc)(); void (*default_done_proc)(); Xv_Window focus_subwindow; /* last subwindow that had the input focus */ Xv_Window primary_focus_sw;/* primary focus subwindow */ XWMHints wmhints; /* Window manager hints structure */ XSizeHints normal_hints; /* WM_SIZE_HINTS */ int geometry_flags; /* Geometry information */ XColor bg; /* background color */ XColor fg; /* foreground color */ Xv_Window focus_window; /* Location Cursor window */ Xv_Window footer; /* Win that is used to implement the footer */ #ifndef OW_I18N char *left_footer; /* string in left footer */ char *right_footer; /* string in right footer */ #endif Graphics_info *ginfo; /* OLGX structure used to paint footers */ Frame_accelerator *accelerators; /* Window Level Accelerator list */ /* ACC_XVIEW */ Frame_menu_accelerator *menu_accelerators; /* Menu Accelerator list */ Menu *menu_list; /* Menu list for acceleration*/ int menu_count; /* Count of menus in list */ int max_menu_count; /* Max count of menus in list */ /* ACC_XVIEW */ #ifdef OW_I18N Xv_Window imstatus; /* Win that is used to implement IMstatus */ _xv_string_attr_dup_t label; /* string in name stripe & default icon */ _xv_string_attr_dup_t left_footer; /* left footer */ _xv_string_attr_dup_t right_footer; /* right footer */ _xv_string_attr_dup_t left_IMstatus; /* IM Status region */ _xv_string_attr_dup_t right_IMstatus; /* IM Status region */ #endif struct { BIT_FIELD(bndrymgr); /* movable borders between subwindows */ BIT_FIELD(full); /* current state is full */ BIT_FIELD(no_confirm); /* don't confirm on destroy */ BIT_FIELD(initial_state); /* icon initial state (set = iconic) */ /* Note that iconic is used only to detect a change in state. * frame_is_iconic() is the function to call to determine * if the frame is iconic or not. */ BIT_FIELD(busy); /* whether frame is busy or not */ BIT_FIELD(iconic); /* whether frame is iconic or not */ BIT_FIELD(dismiss); /* whether frame is being dismissed */ /* or not. */ BIT_FIELD(map_state_change); /* whether we (un)mapped the frame * and should expect an (Un)mapNotify.*/ BIT_FIELD(created); /* whether frame has been created */ BIT_FIELD(frame_color); /* whether frame has been created */ BIT_FIELD(show_footer); /* whether the footer is visable */ BIT_FIELD(compose_led); /* whether the compose LED is on/off */ BIT_FIELD(accept_default_focus);/* whether frame will take focus if none of it's subwindows wants it */ #ifdef OW_I18N BIT_FIELD(show_imstatus); /* whether the IMstatus is visable */ BIT_FIELD(inactive_imstatus); /* whether the IMstatus is active */ #endif } status_bits; } Frame_class_info; #define status_get(frame, field) ((frame)->status_bits.field) #define status_set(frame, field, value) \ (frame)->status_bits.field = ((value) != FALSE) #define FRAME_EACH_CHILD(first, child) \ { Xv_Window _next; \ for ((child) = (first), \ (child) && \ (_next = xv_get((child), XV_KEY_DATA, FRAME_NEXT_CHILD)); \ (child); (child) = _next, \ (child) && \ (_next = xv_get((child), XV_KEY_DATA, FRAME_NEXT_CHILD))) { #define FRAME_EACH_SUBWINDOW(frame, child) \ FRAME_EACH_CHILD((frame)->first_subwindow, child) #define FRAME_EACH_SUBFRAME(frame, child) \ FRAME_EACH_CHILD((frame)->first_subframe, child) #define FRAME_EACH_SHOWN_SUBWINDOW(frame, child) \ FRAME_EACH_SUBWINDOW(frame, child) \ if (!xv_get(child, XV_SHOW)) \ continue; #define FRAME_END_EACH }} #define EXTEND_HEIGHT(child) \ ((int) xv_get((child), WIN_DESIRED_HEIGHT) == WIN_EXTEND_TO_EDGE) #define EXTEND_WIDTH(child) \ ((int) xv_get((child), WIN_DESIRED_WIDTH) == WIN_EXTEND_TO_EDGE) #define frame_getnormalrect(frame, rectp) \ win_getrect(FRAME_PUBLIC(frame), (rectp)) #define frame_setnormalrect(frame, rectp) \ win_setrect(FRAME_PUBLIC(frame), (rectp)) #define frame_is_iconic(frame) (status_get(frame, iconic)) #define FRAME_ICON_WIDTH 64 #define FRAME_ICON_HEIGHT 64 #ifdef OW_I18N #define LEFT_IMSTATUS 0 #define RIGHT_IMSTATUS 1 #endif /* frame.c */ Pkg_private int frame_init(); Pkg_private int frame_notify_count; Pkg_private void frame_default_done_func(); /* frame_get.c */ Pkg_private Xv_opaque frame_get_attr(); /* frame_set.c */ Pkg_private Xv_opaque frame_set_avlist(); /* frame_layout.c */ Pkg_private int frame_layout(); Pkg_private Xv_Window frame_last_child(); /* frame_destroy.c */ Pkg_private int frame_destroy(); /* frame_win.c */ Pkg_private int frame_is_exposed(); /* frame_input.c */ Pkg_private Notify_value frame_input(); Pkg_private Notify_value frame_footer_input(); #ifdef OW_I18N Pkg_private Notify_value frame_IMstatus_input(); #endif Pkg_private void frame_focus_win_event_proc(); /* frame_display.c */ Pkg_private void frame_display_label(); Pkg_private void frame_display_footer(); #ifdef OW_I18N Pkg_private void frame_display_IMstatus(); #endif Pkg_private int frame_set_color(); /* fm_geom.c */ Pkg_private int frame_height_from_lines(); Pkg_private int frame_width_from_columns(); Pkg_private void frame_position_sw(); Pkg_private int frame_footer_height(); #ifdef OW_I18N Pkg_private int frame_IMstatus_height(); #endif Pkg_private int frame_footer_baseline(); Pkg_private int frame_footer_margin(); Pkg_private int frame_inter_footer_gap(); /* frame_cmdline.c */ Pkg_private int frame_set_cmdline_options(); Pkg_private int frame_set_icon_cmdline_options(); /* frame_rescale.c */ Pkg_private void frame_rescale_subwindows(); /* frame_sw.c */ Pkg_private void frame_layout_subwindows(); #endif