فهرست منبع

applied patch of Paul Liu to allow onthefly resizing due to xrandr changes

Anselm R. Garbe 18 سال پیش
والد
کامیت
f9e7a33019
3فایلهای تغییر یافته به همراه25 افزوده شده و 2 حذف شده
  1. 19 0
      event.c
  2. 4 1
      layout.c
  3. 2 1
      main.c

+ 19 - 0
event.c

@@ -207,6 +207,24 @@ configurerequest(XEvent *e) {
 	XSync(dpy, False);
 }
 
+static void
+configurenotify(XEvent *e) {
+	Client *c;
+	XConfigureEvent *ev = &e->xconfigure;
+	XWindowChanges wc;
+
+	if (ev->window == root && (ev->width != sw || ev->height != sh)) {
+		sw = ev->width;
+		sh = ev->height;
+		wah = sh - bh;
+		waw = sw;
+		XFreePixmap(dpy, dc.drawable);
+		dc.drawable = XCreatePixmap(dpy, root, sw, bh, DefaultDepth(dpy, screen));
+		XResizeWindow(dpy, barwin, sw, bh);
+		lt->arrange();
+	}
+}
+
 static void
 destroynotify(XEvent *e) {
 	Client *c;
@@ -333,6 +351,7 @@ unmapnotify(XEvent *e) {
 void (*handler[LASTEvent]) (XEvent *) = {
 	[ButtonPress] = buttonpress,
 	[ConfigureRequest] = configurerequest,
+	[ConfigureNotify] = configurenotify,
 	[DestroyNotify] = destroynotify,
 	[EnterNotify] = enternotify,
 	[LeaveNotify] = leavenotify,

+ 4 - 1
layout.c

@@ -46,7 +46,10 @@ tile(void) {
 				nw = tw - 2 * c->border;
 				if(th > 2 * c->border) {
 					ny += (i - nmaster) * th;
-					nh = th - 2 * c->border;
+					if(i == n - 1)
+						nh = wah - ny - 2 * c->border;
+					else
+						nh = th - 2 * c->border;
 				}
 				else /* fallback if th <= 2 * c->border */
 					nh = wah - 2 * c->border;

+ 2 - 1
main.c

@@ -163,9 +163,10 @@ setup(void) {
 	XFreeModifiermap(modmap);
 	/* select for events */
 	wa.event_mask = SubstructureRedirectMask | SubstructureNotifyMask
-		| EnterWindowMask | LeaveWindowMask;
+		| EnterWindowMask | LeaveWindowMask | StructureNotifyMask;
 	wa.cursor = cursor[CurNormal];
 	XChangeWindowAttributes(dpy, root, CWEventMask | CWCursor, &wa);
+	XSelectInput(dpy, root, wa.event_mask);
 	grabkeys();
 	compileregs();
 	for(ntags = 0; tags[ntags]; ntags++);