109 lines
3.1 KiB
C
109 lines
3.1 KiB
C
#define PROGNAME "xmenu"
|
|
|
|
/* Actions for the main loop */
|
|
#define ACTION_NOP 0
|
|
#define ACTION_SELECT 1<<0 /* select item and clear text */
|
|
#define ACTION_MAP 1<<1 /* remap menu windows */
|
|
#define ACTION_DRAW 1<<2 /* redraw menu windows */
|
|
|
|
/* enum for keyboard menu navigation */
|
|
enum { ITEMPREV, ITEMNEXT, ITEMFIRST, ITEMLAST };
|
|
|
|
/* enum for text alignment */
|
|
enum {LeftAlignment, CenterAlignment, RightAlignment};
|
|
|
|
/* macros */
|
|
#define LEN(x) (sizeof (x) / sizeof (x[0]))
|
|
#define MAX(x,y) ((x)>(y)?(x):(y))
|
|
#define MIN(x,y) ((x)<(y)?(x):(y))
|
|
#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b))
|
|
#define GETNUM(n, s) { \
|
|
unsigned long __TMP__; \
|
|
if ((__TMP__ = strtoul((s), NULL, 10)) < INT_MAX) \
|
|
(n) = __TMP__; \
|
|
}
|
|
|
|
/* color enum */
|
|
enum {ColorFG, ColorBG, ColorLast};
|
|
|
|
/* EWMH atoms */
|
|
enum {NetWMName, NetWMWindowType, NetWMWindowTypePopupMenu, NetLast};
|
|
|
|
/* configuration structure */
|
|
struct Config {
|
|
/* the values below are set by config.h */
|
|
const char *font;
|
|
const char *background_color;
|
|
const char *foreground_color;
|
|
const char *selbackground_color;
|
|
const char *selforeground_color;
|
|
const char *separator_color;
|
|
const char *border_color;
|
|
int width_pixels;
|
|
int height_pixels;
|
|
int border_pixels;
|
|
int separator_pixels;
|
|
int gap_pixels;
|
|
int triangle_width;
|
|
int triangle_height;
|
|
int iconpadding;
|
|
int horzpadding;
|
|
int alignment;
|
|
|
|
/* the values below are set by options */
|
|
int monitor;
|
|
int posx, posy; /* rootmenu position */
|
|
|
|
/* the value below is computed by xmenu */
|
|
int iconsize;
|
|
};
|
|
|
|
/* draw context structure */
|
|
struct DC {
|
|
XftColor normal[ColorLast];
|
|
XftColor selected[ColorLast];
|
|
XftColor border;
|
|
XftColor separator;
|
|
|
|
GC gc;
|
|
|
|
FcPattern *pattern;
|
|
XftFont **fonts;
|
|
size_t nfonts;
|
|
};
|
|
|
|
/* menu item structure */
|
|
struct Item {
|
|
char *label; /* string to be drawed on menu */
|
|
char *output; /* string to be outputed when item is clicked */
|
|
char *file; /* filename of the icon */
|
|
int y; /* item y position relative to menu */
|
|
int h; /* item height */
|
|
int textw; /* text width */
|
|
struct Item *prev; /* previous item */
|
|
struct Item *next; /* next item */
|
|
struct Menu *submenu; /* submenu spawned by clicking on item */
|
|
Drawable sel, unsel; /* pixmap for selected and unselected item */
|
|
Imlib_Image icon;
|
|
};
|
|
|
|
/* monitor geometry structure */
|
|
struct Monitor {
|
|
int x, y, w, h; /* monitor geometry */
|
|
};
|
|
|
|
/* menu structure */
|
|
struct Menu {
|
|
struct Menu *parent; /* parent menu */
|
|
struct Item *caller; /* item that spawned the menu */
|
|
struct Item *list; /* list of items contained by the menu */
|
|
struct Item *selected; /* item currently selected in the menu */
|
|
int x, y, w, h; /* menu geometry */
|
|
int hasicon; /* whether the menu has item with icons */
|
|
int drawn; /* whether the menu was already drawn */
|
|
int maxtextw; /* maximum text width */
|
|
unsigned level; /* menu level relative to root */
|
|
Window win; /* menu window to map on the screen */
|
|
XIC xic; /* input context */
|
|
};
|