#include <X11/Xlib.h>
#include <X11/Xutil.h>
#ifdef SHAPE
#include <X11/extensions/shape.h>
#endif
/* user customizable settings --------------------------------------------- */
// Misc options
#define EDGE_RESISTANCE 75
#define STRFTIME_STRING "%Y-%m-%d %H:%M"
#define DEF_NEW1 "rxvt || xterm &"
#define F1_STRING "rxvt || xterm &"
#define F2_STRING "xemacs || emacs &"
#define F3_STRING "netscape &"
#define DEF_FONT "Lucidasans-Bold-10"
// Descent bright default colorset
#define TITLE_BG "grey"
#define TITLE_FG "black"
#define TITLE_FOCUS_BG "black"
#define TITLE_FOCUS_FG "white"
#define BORDER_COLOR "black"
#define TASKBAR_BG "grey"
#define TASKBAR_FOCUS_FG "black"
#define TASKBAR_HIDDEN_FG "grey50"
#define TASKBAR_NORMAL_FG "black"
/* Internal settings -- dont touch! ---------------------------------------- */
#define DEF_BW 2
#define SPACE 3
#define MINSIZE 15
#define USE_TASKBAR 1
#define MAX_CLIENTS_ON_TASKBAR 20
#define TASKBAR_HEIGHT (font->ascent + font->descent + 4*SPACE)
#define MIN(x,y) (if x<y ? x : y)
#ifdef DEBUG
#define debug(x) printf(x)
#else
#define debug(x) ;
#endif
#define ChildMask (SubstructureRedirectMask|SubstructureNotifyMask)
#define ButtonMask (ButtonPressMask|ButtonReleaseMask)
#define MouseMask (ButtonMask|PointerMotionMask)
#define streq(s1, s2) \
(strcmp(s1, s2) == 0)
#define theight(c) \
(iheight + opt_bw)
#define grab(w, mask, curs) \
(XGrabPointer(dpy, w, False, mask, GrabModeAsync, GrabModeAsync, \
None, curs, CurrentTime) == GrabSuccess)
#define ungrab() \
XUngrabPointer(dpy, CurrentTime)
#define setmouse(w, x, y) \
XWarpPointer(dpy, None, w, 0, 0, 0, 0, x, y)
/* client structure */
typedef struct _Client Client;
struct _Client {
Client *next;
Client *prev;
Window window;
Window parent;
Window trans;
Colormap cmap;
XSizeHints *size;
char *name;
char *barname;
int ignore_unmap;
int x;
int y;
int width;
int height;
int minimized;
int left_offset;
int right_offset;
int maximized;
int shaded;
int stored_x;
int stored_y;
int stored_width;
int stored_height;
int title;
};
/* declarations for global variables in main.c */
extern Display *dpy;
extern Display *child_dpy;
extern int screen;
extern Window root;
extern Window taskbar;
extern GC invert_gc;
extern GC string_gc;
extern GC focus_string_gc;
extern GC hidden_string_gc;
extern GC normal_string_gc;
extern GC focus_bg_gc;
extern GC focus_fg_gc;
extern GC border_gc;
extern GC taskbar_focus_fg_gc;
extern GC taskbar_bg_gc;
XColor fg, bg, bd, focus_bg, focus_fg, normal_fg, taskbar_bg, taskbar_focus_fg;
extern XFontStruct *font;
extern int iheight;
extern int current_desk;
extern XColor fg, bg, bd;
extern Client *head_client;
extern Atom xa_wm_state;
extern Atom xa_wm_change_state;
extern Atom xa_wm_protos;
extern Atom xa_wm_delete;
extern Atom xa_wm_cmapwins;
extern Cursor move_curs;
extern Cursor resize_curs;
extern char *opt_display;
extern char *opt_font;
extern char *opt_focus_fg;
extern char *opt_focus_bg;
extern char *opt_fg;
extern char *opt_bg;
extern char *opt_bd;
extern char *opt_new2;
extern char *opt_new1;
extern char *opt_taskbar_bg;
extern char *opt_taskbar_focus_fg;
extern int opt_bw;
extern Client *focused_client;
#ifdef SHAPE
extern Bool shape;
extern int shape_event;
#endif
/* client.c */
Client *find_client(Window w, int from_parent);
int send_xmessage(Window w, Atom a, long x);
int wm_state(Client *c);
void redraw(Client *c);
void remove_client(Client *c, int from_cleanup);
void send_config(Client *c);
void send_wm_delete(Client *c);
void set_shape(Client *c);
void set_wm_state(Client *c, int state);
/* events.c */
void handle_keypress_event(XKeyEvent *e);
void handle_button_event(XButtonEvent *e);
void handle_client_message(XClientMessageEvent *e);
void handle_colormap_change(XColormapEvent *e);
void handle_configure_request(XConfigureRequestEvent *e);
void handle_enter_event(XCrossingEvent *e);
void handle_expose_event(XExposeEvent *e);
void handle_map_request(XMapRequestEvent *e);
void handle_property_change(XPropertyEvent *e);
void handle_reparent_event(XReparentEvent *e);
void handle_unmap_event(XUnmapEvent *e);
/* main.c */
int main(int argc, char *argv[]);
void scan_windows();
void setup_display();
/* taskbar.c */
void draw_bartime(char *thestring);
void start_taskbar(void);
void taskbar_start(void);
void draw_tasks (void);
void dec_barname(Client *c);
int find_width(void);
int count_tasks(void);
Client * next_non_minimized(Client *c);
Client * find_client_with_longest_name(void);
/* misc.c */
int handle_xerror(Display *dpy, XErrorEvent *e);
void do_event_loop();
void dump_clients();
void err(char *fmt, ...);
void quit_nicely();
void show_event(XEvent e);
/* new.c */
void init_position(Client *c);
void initialize(Client *c, Window w);
void make_new_client(Window w);
void reparent(Client *c);
/* screen.c */
void drag(Client *c);
void draw_outline(Client *c);
void get_mouse_position(int *x, int *y);
void hide(Client *c);
void move(Client *c);
void recalculate_sweep(Client *c, int x1, int y1, int x2, int y2);
void resize(Client *c);
void sweep(Client *c);
void unhide(Client *c);
syntax highlighted by Code2HTML, v. 0.9.1