summaryrefslogtreecommitdiff
path: root/oldresources/st/patch/st_embedder_x.c
blob: c73c3894a331a1ed80029405cfa12c59f3586e53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
static Window embed;

void
createnotify(XEvent *e)
{
	XWindowChanges wc;

	if (embed || e->xcreatewindow.override_redirect)
		return;

	embed = e->xcreatewindow.window;

	XReparentWindow(xw.dpy, embed, xw.win, 0, 0);
	XSelectInput(xw.dpy, embed, PropertyChangeMask | StructureNotifyMask | EnterWindowMask);

	XMapWindow(xw.dpy, embed);
	sendxembed(XEMBED_EMBEDDED_NOTIFY, 0, xw.win, 0);

	wc.width = win.w;
	wc.height = win.h;
	XConfigureWindow(xw.dpy, embed, CWWidth | CWHeight, &wc);

	XSetInputFocus(xw.dpy, embed, RevertToParent, CurrentTime);
}

void
destroynotify(XEvent *e)
{
	visibility(e);
	if (embed == e->xdestroywindow.window) {
		focus(e);
	}
}

void
sendxembed(long msg, long detail, long d1, long d2)
{
	XEvent e = { 0 };

	e.xclient.window = embed;
	e.xclient.type = ClientMessage;
	e.xclient.message_type = xw.xembed;
	e.xclient.format = 32;
	e.xclient.data.l[0] = CurrentTime;
	e.xclient.data.l[1] = msg;
	e.xclient.data.l[2] = detail;
	e.xclient.data.l[3] = d1;
	e.xclient.data.l[4] = d2;
	XSendEvent(xw.dpy, embed, False, NoEventMask, &e);
}