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/Xlib.h> | ||||||
| #include <X11/Xproto.h> | #include <X11/Xproto.h> | ||||||
| #include <X11/Xutil.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 | #ifdef XINERAMA | ||||||
| #include <X11/extensions/Xinerama.h> | #include <X11/extensions/Xinerama.h> | ||||||
| #endif | #endif | ||||||
| @ -76,6 +91,10 @@ struct Client { | |||||||
| 	Window win; | 	Window win; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  | typedef struct { | ||||||
|  | 	int x, y, w, h; | ||||||
|  | } Column; | ||||||
|  | 
 | ||||||
| typedef struct { | typedef struct { | ||||||
| 	int x, y, w, h; | 	int x, y, w, h; | ||||||
| 	unsigned long norm[ColLast]; | 	unsigned long norm[ColLast]; | ||||||
| @ -195,7 +214,7 @@ void selectview(const char *arg); | |||||||
| /* variables */ | /* variables */ | ||||||
| char stext[256], buf[256]; | char stext[256], buf[256]; | ||||||
| double mwfact; | 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 *); | int (*xerrorxlib)(Display *, XErrorEvent *); | ||||||
| unsigned int bh, bpos; | unsigned int bh, bpos; | ||||||
| unsigned int blw = 0; | unsigned int blw = 0; | ||||||
| @ -224,14 +243,12 @@ Bool *seltags; | |||||||
| Client *clients = NULL; | Client *clients = NULL; | ||||||
| Client *sel = NULL; | Client *sel = NULL; | ||||||
| Client *stack = NULL; | Client *stack = NULL; | ||||||
|  | Column *cols = NULL; | ||||||
| Cursor cursor[CurLast]; | Cursor cursor[CurLast]; | ||||||
| Display *dpy; | Display *dpy; | ||||||
| DC dc = {0}; | DC dc = {0}; | ||||||
| Layout *lt; | Layout *lt; | ||||||
| Window root, barwin; | Window root, barwin; | ||||||
| #ifdef XINERAMA |  | ||||||
| XineramaScreenInfo *info = NULL; |  | ||||||
| #endif |  | ||||||
| 
 | 
 | ||||||
| /* configuration, allows nested code to access above variables */ | /* configuration, allows nested code to access above variables */ | ||||||
| #include "config.h" | #include "config.h" | ||||||
| @ -393,10 +410,6 @@ cleanup(void) { | |||||||
| 	XFreeCursor(dpy, cursor[CurResize]); | 	XFreeCursor(dpy, cursor[CurResize]); | ||||||
| 	XFreeCursor(dpy, cursor[CurMove]); | 	XFreeCursor(dpy, cursor[CurMove]); | ||||||
| 	XDestroyWindow(dpy, barwin); | 	XDestroyWindow(dpy, barwin); | ||||||
| #if XINERAMA |  | ||||||
| 	if(info) |  | ||||||
| 		XFree(info); |  | ||||||
| #endif |  | ||||||
| 	XSync(dpy, False); | 	XSync(dpy, False); | ||||||
| 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | 	XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); | ||||||
| } | } | ||||||
| @ -1458,8 +1471,12 @@ setmwfact(const char *arg) { | |||||||
| 
 | 
 | ||||||
| void | void | ||||||
| setup(void) { | setup(void) { | ||||||
|  | 	int screens = 1; | ||||||
| 	unsigned int i; | 	unsigned int i; | ||||||
| 	XSetWindowAttributes wa; | 	XSetWindowAttributes wa; | ||||||
|  | #ifdef XINERAMA | ||||||
|  | 	XineramaScreenInfo *info; | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| 	/* init screen */ | 	/* init screen */ | ||||||
| 	screen = DefaultScreen(dpy); | 	screen = DefaultScreen(dpy); | ||||||
| @ -1482,11 +1499,38 @@ setup(void) { | |||||||
| 	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); | 	cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); | ||||||
| 	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); | 	cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); | ||||||
| 
 | 
 | ||||||
|  | 	ncols = 2; | ||||||
| #ifdef XINERAMA | #ifdef XINERAMA | ||||||
| 	if(XineramaIsActive(dpy)) | 	if(XineramaIsActive(dpy)) { | ||||||
| 		info = XineramaQueryScreens(dpy, &xscreens); | 		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 | #endif | ||||||
|  | 	{ | ||||||
|  | 		cols = emallocz(ncols * sizeof(Column)); | ||||||
|  | 		cols[0].x = sx; | ||||||
|  | 		cols[0].y = sy; | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | 	} | ||||||
| 	/* init appearance */ | 	/* init appearance */ | ||||||
| 	dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR); | 	dc.norm[ColBorder] = getcolor(NORMBORDERCOLOR); | ||||||
| 	dc.norm[ColBG] = getcolor(NORMBGCOLOR); | 	dc.norm[ColBG] = getcolor(NORMBGCOLOR); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user