1 /* © 2004-2006 Anselm R. Garbe <garbeam at gmail dot com> 2 * See LICENSE file for license details. 3 */ 4 5 #define IXP_P9_STRUCTS 6 #define IXP_NO_P9_ 7 #include <regexp9.h> 8 #include <stdint.h> 9 #include <ixp.h> 10 #include <util.h> 11 #include <utf.h> 12 #include <fmt.h> 13 #include "x11.h" 14 15 #define FONT "-*-fixed-medium-r-*-*-13-*-*-*-*-*-*-*" 16 #define FOCUSCOLORS "#ffffff #335577 #447799" 17 #define NORMCOLORS "#222222 #eeeeee #666666" 18 19 enum Align { 20 NORTH = 0x01, 21 EAST = 0x02, 22 SOUTH = 0x04, 23 WEST = 0x08, 24 NEAST = NORTH | EAST, 25 NWEST = NORTH | WEST, 26 SEAST = SOUTH | EAST, 27 SWEST = SOUTH | WEST, 28 CENTER = NEAST | SWEST, 29 }; 30 31 typedef struct CTuple CTuple; 32 typedef enum Align Align; 33 34 struct CTuple { 35 ulong bg; 36 ulong fg; 37 ulong border; 38 char colstr[24]; /* #RRGGBB #RRGGBB #RRGGBB */ 39 }; 40 41 enum { 42 Coldefault, Colstack, Colmax, 43 }; 44 45 enum { 46 Off, 47 On, 48 Toggle, 49 }; 50 51 enum { 52 CurNormal, 53 CurNECorner, CurNWCorner, CurSECorner, CurSWCorner, 54 CurDHArrow, CurMove, CurInput, CurSizing, CurIcon, 55 CurNone, 56 CurLast, 57 }; 58 59 enum { 60 NCOL = 16, 61 WM_PROTOCOL_DELWIN = 1, 62 }; 63 64 /* Data Structures */ 65 typedef struct View View; 66 typedef struct Area Area; 67 typedef struct Frame Frame; 68 typedef struct Client Client; 69 typedef struct Divide Divide; 70 typedef struct Key Key; 71 typedef struct Bar Bar; 72 typedef struct Rule Rule; 73 typedef struct Ruleset Ruleset; 74 typedef struct WMScreen WMScreen; 75 typedef struct Map Map; 76 typedef struct MapEnt MapEnt; 77 78 struct Map { 79 MapEnt **bucket; 80 uint nhash; 81 }; 82 83 struct MapEnt { 84 ulong hash; 85 char *key; 86 void *val; 87 MapEnt *next; 88 }; 89 90 struct View { 91 View *next; 92 char name[256]; 93 ushort id; 94 Area *area; 95 Area *sel; 96 Area *revert; 97 }; 98 99 struct Area { 100 Area *next, *prev; 101 Frame *frame; 102 Frame *stack; 103 Frame *sel; 104 View *view; 105 Bool floating; 106 ushort id; 107 int mode; 108 Rectangle r; 109 }; 110 111 struct Frame { 112 Frame *cnext; 113 Frame *anext, *aprev; 114 Frame *snext, *sprev; 115 View *view; 116 Area *area; 117 ushort id; 118 Rectangle r; 119 Rectangle crect; 120 Rectangle revert; 121 Client *client; 122 Bool collapsed; 123 Rectangle grabbox; 124 Rectangle titlebar; 125 float ratio; 126 }; 127 128 struct Client { 129 Client *next; 130 Area *revert; 131 Frame *frame; 132 Frame *sel; 133 char name[256]; 134 char tags[256]; 135 char props[512]; 136 uint border; 137 int proto; 138 Bool floating; 139 Bool fixedsize; 140 Bool fullscreen; 141 Bool urgent; 142 Bool borderless; 143 Bool titleless; 144 Bool noinput; 145 int unmapped; 146 Window w; 147 XWindow trans; 148 Window *framewin; 149 Cursor cursor; 150 Rectangle r; 151 XSizeHints size; 152 GC gc; 153 }; 154 155 struct Divide { 156 Divide *next; 157 Window *w; 158 Bool mapped; 159 int x; 160 }; 161 162 struct Key { 163 Key *next; 164 Key *lnext; 165 Key *tnext; 166 ushort id; 167 char name[128]; 168 ulong mod; 169 KeyCode key; 170 }; 171 172 struct Bar { 173 Bar *next; 174 Bar *smaller; 175 char buf[280]; 176 char text[256]; 177 char name[256]; 178 ushort id; 179 Rectangle r; 180 CTuple col; 181 }; 182 183 struct Rule { 184 Rule *next; 185 Reprog *regex; 186 char value[256]; 187 }; 188 189 struct Ruleset { 190 Rule *rule; 191 char *string; 192 uint size; 193 }; 194 195 /* global variables */ 196 struct Global { 197 CTuple focuscolor; 198 CTuple normcolor; 199 Font *font; 200 uint border; 201 uint snap; 202 char *keys; 203 uint keyssz; 204 Ruleset tagrules; 205 Ruleset colrules; 206 char grabmod[5]; 207 ulong mod; 208 int colmode; 209 }; 210 211 extern struct Global def; 212 213 enum { 214 BarLeft, BarRight 215 }; 216 217 struct WMScreen { 218 Bar *bar[2]; 219 View *sel; 220 Client *focus; 221 Client *hasgrab; 222 Window *barwin; 223 Image *ibuf; 224 225 Rectangle r; 226 Rectangle brect; 227 }; 228 229 extern WMScreen *screens, *screen; 230 231 extern Client *client; 232 extern View *view; 233 extern Key *key; 234 extern Divide *divs; 235 extern Client c_magic; 236 extern Client c_root; 237 238 extern Handlers framehandler; 239 240 extern char buffer[8092]; 241 242 /* IXP */ 243 extern IxpServer srv; 244 extern Ixp9Srv p9srv; 245 246 /* X11 */ 247 extern uint num_screens; 248 extern uint valid_mask; 249 extern uint num_lock_mask; 250 extern Bool sel_screen; 251 252 extern Image xor; 253 254 extern Cursor cursor[CurLast]; 255 extern void (*handler[LASTEvent]) (XEvent *); 256 257 /* Misc */ 258 extern Image *broken; 259 extern Bool starting; 260 extern Bool verbose; 261 extern char *user; 262 extern char *execstr; 263 264 #define Debug if(verbose) 265 #define Dprint(...) do{ Debug fprint(2, __VA_ARGS__); }while(0) 266 267