next on TODO
							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…
	
		Reference in New Issue