next on TODO
This commit is contained in:
		
							parent
							
								
									295ad21092
								
							
						
					
					
						commit
						e3c2d327f6
					
				
							
								
								
									
										64
									
								
								dwm.c
									
									
									
									
									
								
							
							
						
						
									
										64
									
								
								dwm.c
									
									
									
									
									
								
							| @ -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 | ||||
| @ -76,6 +91,10 @@ struct Client { | ||||
| 	Window win; | ||||
| }; | ||||
| 
 | ||||
| typedef struct { | ||||
| 	int x, y, w, h; | ||||
| } Column; | ||||
| 
 | ||||
| typedef struct { | ||||
| 	int x, y, w, h; | ||||
| 	unsigned long norm[ColLast]; | ||||
| @ -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); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user