Home | History | Annotate | Line # | Download | only in dist
      1 /*
      2  * twm menus include file
      3  *
      4  *
      5  *       Copyright 1988 by Evans & Sutherland Computer Corporation,
      6  *                          Salt Lake City, Utah
      7  *  Portions Copyright 1989 by the Massachusetts Institute of Technology
      8  *                        Cambridge, Massachusetts
      9  *
     10  * $XConsortium: menus.h,v 1.24 89/12/10 17:46:26 jim Exp $
     11  *
     12  * 17-Nov-87 Thomas E. LaStrange                File created
     13  *
     14  * Copyright 1992 Claude Lecommandeur.
     15  */
     16 
     17 #ifndef _CTWM_MENUS_H
     18 #define _CTWM_MENUS_H
     19 
     20 #define TWM_ROOT        "bLoB_GoOp"     /* my private root menu */
     21 #define TWM_WINDOWS     "TwmWindows"    /* for f.menu "TwmWindows" */
     22 #define TWM_ICONS       "TwmIcons"      /* for f.menu "TwmIcons" */
     23 #define TWM_WORKSPACES  "TwmWorkspaces" /* for f.menu "TwmWorkspaces" */
     24 #define TWM_ALLWINDOWS  "TwmAllWindows" /* for f.menu "TwmAllWindows" */
     25 
     26 /* Added by dl 2004 */
     27 #define TWM_ALLICONS    "TwmAllIcons"   /* for f.menu "TwmAllIcons" */
     28 
     29 /*******************************************************************/
     30 /* Added by Dan Lilliehorn (dl (at) dl.nu) 2000-02-29                   */
     31 #define TWM_KEYS        "TwmKeys"       /* for f.menu "TwmKeys"    */
     32 #define TWM_VISIBLE     "TwmVisible"    /* for f.menu "TwmVisible" */
     33 
     34 
     35 /*
     36  * MenuRoot.mapped - current/past state.
     37  *
     38  * XXX Perhaps the NEVER_MAPPED stuff should be pulled out and tracked
     39  * some other way, and mapped just made into an bool.
     40  */
     41 typedef enum {
     42 	MRM_NEVER,
     43 	MRM_UNMAPPED,
     44 	MRM_MAPPED,
     45 } MRMapState;
     46 
     47 
     48 struct MenuItem {
     49 	struct MenuItem *next;      /* next menu item */
     50 	struct MenuItem *prev;      /* prev menu item */
     51 	struct MenuRoot *sub;       /* MenuRoot of a pull right menu */
     52 	struct MenuRoot *root;      /* back pointer to my MenuRoot */
     53 	char *item;                 /* the character string displayed */
     54 	char *action;               /* action to be performed */
     55 	ColorPair normal;           /* unhiglight colors */
     56 	ColorPair highlight;        /* highlight colors */
     57 	short item_num;             /* item number of this menu */
     58 	short x;                    /* x coordinate for text */
     59 	short func;                 /* twm built in function */
     60 	bool  state;                /* in reversed video state (i.e., active) */
     61 	short strlen;               /* strlen(item) */
     62 	bool  user_colors;          /* colors were specified */
     63 	bool  separated;            /* separated from the next item */
     64 };
     65 
     66 struct MenuRoot {
     67 	struct MenuItem *first;     /* first item in menu */
     68 	struct MenuItem *last;      /* last item in menu */
     69 	struct MenuItem *lastactive; /* last active item in menu */
     70 	struct MenuItem *defaultitem;       /* default item in menu */
     71 	struct MenuRoot *prev;      /* previous root menu if pull right */
     72 	struct MenuRoot *next;      /* next in list of root menus */
     73 	char *name;                 /* name of root */
     74 	Window w;                   /* the window of the menu */
     75 	Window shadow;              /* the shadow window */
     76 	ColorPair highlight;        /* highlight colors */
     77 	MRMapState mapped;          /* whether ever/currently mapped */
     78 	short height;               /* height of the menu */
     79 	short width;                /* width of the menu */
     80 	short items;                /* number of items in the menu */
     81 	bool  pull;                 /* is there a pull right entry ? */
     82 	bool  entered;              /* EnterNotify following pop up */
     83 	bool  real_menu;            /* this is a real menu */
     84 	short x, y;                 /* position (for pinned menus) */
     85 	bool  pinned;               /* is this a pinned menu*/
     86 	struct MenuRoot *pmenu;     /* the associated pinned menu */
     87 };
     88 
     89 
     90 struct MouseButton {
     91 	int func;                   /* the function number */
     92 	int mask;                   /* modifier mask */
     93 	MenuRoot *menu;             /* menu if func is F_MENU */
     94 	MenuItem *item;             /* action to perform if func != F_MENU */
     95 };
     96 
     97 struct FuncButton {
     98 	struct FuncButton *next;    /* next in the list of function buttons */
     99 	int num;                    /* button number */
    100 	int cont;                   /* context */
    101 	int mods;                   /* modifiers */
    102 	int func;                   /* the function number */
    103 	MenuRoot *menu;             /* menu if func is F_MENU */
    104 	MenuItem *item;             /* action to perform if func != F_MENU */
    105 };
    106 
    107 struct FuncKey {
    108 	struct FuncKey *next;       /* next in the list of function keys */
    109 	char *name;                 /* key name */
    110 	KeySym keysym;              /* X keysym */
    111 	KeyCode keycode;            /* X keycode */
    112 	int cont;                   /* context */
    113 	int mods;                   /* modifiers */
    114 	int func;                   /* function to perform */
    115 	char *win_name;             /* window name (if any) */
    116 	char *action;               /* action string (if any) */
    117 	MenuRoot *menu;             /* menu if func is F_MENU */
    118 };
    119 
    120 extern MenuRoot *ActiveMenu;
    121 extern MenuItem *ActiveItem;
    122 
    123 extern bool menuFromFrameOrWindowOrTitlebar;
    124 extern char *CurrentSelectedWorkspace;
    125 extern bool AlternateContext;
    126 extern int AlternateKeymap;
    127 
    128 #define MAXMENUDEPTH    10      /* max number of nested menus */
    129 extern int MenuDepth;
    130 
    131 #define WARPSCREEN_NEXT "next"
    132 #define WARPSCREEN_PREV "prev"
    133 #define WARPSCREEN_BACK "back"
    134 
    135 #define COLORMAP_NEXT "next"
    136 #define COLORMAP_PREV "prev"
    137 #define COLORMAP_DEFAULT "default"
    138 
    139 MenuRoot *NewMenuRoot(char *name);
    140 MenuItem *AddToMenu(MenuRoot *menu, char *item, char *action,
    141                     MenuRoot *sub, int func, char *fore, char *back);
    142 bool PopUpMenu(MenuRoot *menu, int x, int y, bool center);
    143 void MakeWorkspacesMenu(void);
    144 MenuRoot *FindMenuRoot(char *name);
    145 bool AddFuncKey(char *name, int cont, int mods, int func,
    146                 MenuRoot *menu, char *win_name, char *action);
    147 void AddFuncButton(int num, int cont, int mods, int func,
    148                    MenuRoot *menu, MenuItem *item);
    149 void AddDefaultFuncButtons(void);
    150 void PopDownMenu(void);
    151 void HideMenu(MenuRoot *menu);
    152 void PaintEntry(MenuRoot *mr, MenuItem *mi, bool exposure);
    153 void PaintMenu(MenuRoot *mr, XEvent *e);
    154 bool cur_fromMenu(void);
    155 void UpdateMenu(void);
    156 void MakeMenus(void);
    157 void MakeMenu(MenuRoot *mr);
    158 void MoveMenu(XEvent *eventp);
    159 void WarpCursorToDefaultEntry(MenuRoot *menu);
    160 
    161 // Mostly internal; exposed for testing
    162 char *mk_twmkeys_entry(const FuncKey *key);
    163 
    164 #endif /* _CTWM_MENUS_H */
    165