120 lines · 2.6 KB · C
RawDownload
#include <lib9.h>#include <kern.h>#include <draw.h>#include <memdraw.h>#include <memlayer.h>#include <cursor.h>#include "dat.h"#include "fns.h"#include "inc.h"#include "x.h" voidxbottomwindow(Window *w){	Xwin *xw; 	xtogglefullscreen(xconn.fullscreen);	xw = w->x;	XLowerWindow(xconn.display, xw->drawable);	XFlush(xconn.display);} voidxtopwindow(Window *w){	Xwin *xw; 	xtogglefullscreen(xconn.fullscreen);	xw = w->x;	XMapRaised(xconn.display, xw->drawable);	XFlush(xconn.display);} voidxcurrentwindow(Window *w){	Xwin *xw; 	xtogglefullscreen(xconn.fullscreen);	xw = w->x;	XMapRaised(xconn.display, xw->drawable);	XSetInputFocus(xconn.display, xw->drawable, RevertToPointerRoot,		CurrentTime);	XFlush(xconn.display);} voidxresizewindow(Window *w, Rectangle r){	XWindowChanges e;	int value_mask;	Xwin *xw; 	if(w != xconn.fullscreen || ! eqrect(r, xconn.screenrect))		xtogglefullscreen(xconn.fullscreen);	xw = w->x;	memset(&e, 0, sizeof e);	value_mask = CWX|CWY|CWWidth|CWHeight;	e.x = r.min.x;	e.y = r.min.y;	e.width = Dx(r);	e.height = Dy(r);	XConfigureWindow(xconn.display, xw->drawable, value_mask, &e);	if(w->visible)		XMapWindow(xconn.display, xw->drawable);	else		XUnmapWindow(xconn.display, xw->drawable);	XFlush(xconn.display);} voidxmovewindow(Window *w, Rectangle r){	XWindowChanges e;	int value_mask;	Xwin *xw; 	xtogglefullscreen(xconn.fullscreen);	xw = w->x;	memset(&e, 0, sizeof e);	value_mask = CWX|CWY|CWWidth|CWHeight;	e.x = r.min.x;	e.y = r.min.y;	e.width = Dx(r);	e.height = Dy(r);	XConfigureWindow(xconn.display, xw->drawable, value_mask, &e);	XFlush(xconn.display);} void xtogglefullscreen(Window* w){	Mouse m;	XSetWindowAttributes attr;	Xwin *xw; 	if(w == nil)		return;	xw = w->x;	if(w == xconn.fullscreen){		xconn.fullscreen = nil;		xresizewindow(w, xconn.restore);		XUngrabKeyboard(xconn.display, CurrentTime);		attr.override_redirect = False;		XChangeWindowAttributes(xconn.display, xw->drawable, CWOverrideRedirect, &attr);		XUnmapWindow(xconn.display, xw->drawable);		XMapRaised(xconn.display, xw->drawable);	}else{		xconn.restore = rectaddpt(w->screenr, w->orig);		/* xconn.fullscreen must be nil when xresizewindow is called */		xconn.fullscreen = w;		attr.override_redirect = True;		XChangeWindowAttributes(xconn.display, xw->drawable, CWOverrideRedirect, &attr);		XUnmapWindow(xconn.display, xw->drawable);		XMapRaised(xconn.display, xw->drawable);		xresizewindow(w, xconn.screenrect);		XGrabKeyboard(xconn.display, xw->drawable, False, GrabModeAsync, GrabModeAsync, CurrentTime);	}	writemouse(w, m, 1);}