diff options
| author | anselm@anselm1 <unknown> | 2008-03-05 00:11:44 +0000 | 
|---|---|---|
| committer | anselm@anselm1 <unknown> | 2008-03-05 00:11:44 +0000 | 
| commit | e3c2d327f6f2874a165357d1ea2a50b2baf3a6f4 (patch) | |
| tree | e4b604d5858e6355aec9f4cff64e111565d103fb | |
| parent | 295ad21092ce26062c79463b7f2ba5849d2fb823 (diff) | |
next on TODO
| -rw-r--r-- | dwm.c | 64 | 
1 files changed, 54 insertions, 10 deletions
| @@ -40,6 +40,21 @@  #include <X11/Xlib.h>  #include <X11/Xproto.h>  #include <X11/Xutil.h> +/* + * TODO: Idea: + * I intend to not provide real Xinerama support, but instead having a Column + * tilecols[] array which is used by tile(), and a Column maxcols[] arrays which is used by + * maximise(). Those arrays should be initialized in config.h. For simplicity + * reasons mwfact should be replaced with a more advanced method which + * implements the same, but using the boundary between tilecols[0] and + * tilecols[1] instead. Besides this, get rid of BARPOS and use instead the + * following mechanism: + * + * #define BX 0 + * #define BY 0 + * #define BW sw + * bh is calculated automatically and should be used for the  + */  #ifdef XINERAMA  #include <X11/extensions/Xinerama.h>  #endif @@ -78,6 +93,10 @@ struct Client {  typedef struct {  	int x, y, w, h; +} Column; + +typedef struct { +	int x, y, w, h;  	unsigned long norm[ColLast];  	unsigned long sel[ColLast];  	Drawable drawable; @@ -195,7 +214,7 @@ void selectview(const char *arg);  /* variables */  char stext[256], buf[256];  double mwfact; -int screen, sx, sy, sw, sh, wax, way, waw, wah, xscreens; +int screen, sx, sy, sw, sh, wax, way, waw, wah, ncols;  int (*xerrorxlib)(Display *, XErrorEvent *);  unsigned int bh, bpos;  unsigned int blw = 0; @@ -224,14 +243,12 @@ Bool *seltags;  Client *clients = NULL;  Client *sel = NULL;  Client *stack = NULL; +Column *cols = NULL;  Cursor cursor[CurLast];  Display *dpy;  DC dc = {0};  Layout *lt;  Window root, barwin; -#ifdef XINERAMA -XineramaScreenInfo *info = NULL; -#endif  /* configuration, allows nested code to access above variables */  #include "config.h" @@ -393,10 +410,6 @@ cleanup(void) {  	XFreeCursor(dpy, cursor[CurResize]);  	XFreeCursor(dpy, cursor[CurMove]);  	XDestroyWindow(dpy, barwin); -#if XINERAMA -	if(info) -		XFree(info); -#endif  	XSync(dpy, False);  	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime);  } @@ -1458,8 +1471,12 @@ setmwfact(const char *arg) {  void  setup(void) { +	int screens = 1;  	unsigned int i;  	XSetWindowAttributes wa; +#ifdef XINERAMA +	XineramaScreenInfo *info; +#endif  	/* init screen */  	screen = DefaultScreen(dpy); @@ -1482,11 +1499,38 @@ setup(void) {  	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);  	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); +	ncols = 2;  #ifdef XINERAMA -	if(XineramaIsActive(dpy)) -		info = XineramaQueryScreens(dpy, &xscreens); +	if(XineramaIsActive(dpy)) { +		if((info = XineramaQueryScreens(dpy, &screens))) { +			if(screens == 1) { +				sx = info[0].x_org; +				sy = info[0].y_org; +				sw = info[0].width; +				sh = info[0].height; +			} +			else { +				ncols = screens; +				cols = emallocz(ncols * sizeof(Column)); +				for(i = 0; i < ncols; i++) { +					cols[i].x = info[i].x_org; +					cols[i].y = info[i].y_org; +					cols[i].w = info[i].width; +					cols[i].h = info[i].height; +				} +			} +			XFree(info); +		} +	} +	else  #endif +	{ +		cols = emallocz(ncols * sizeof(Column)); +		cols[0].x = sx; +		cols[0].y = sy; + +	}  	/* init appearance */  	dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR);  	dc.norm[ColBG] = getcolor(NORMBGCOLOR); | 
