summaryrefslogtreecommitdiff
path: root/oldresources/st/patch/st_embedder_x.c
diff options
context:
space:
mode:
authorauric <auric7@protonmail.com>2025-09-07 20:17:07 -0500
committerauric <auric7@protonmail.com>2025-09-07 20:17:07 -0500
commit22d02614eaa4530092d564336b3e7076c9f0bc36 (patch)
tree947fd56ed33fedb80c14dab7adab0dc71760540b /oldresources/st/patch/st_embedder_x.c
parent7de2c2044596ef810045e4565916e18903d822c1 (diff)
1
Diffstat (limited to 'oldresources/st/patch/st_embedder_x.c')
-rw-r--r--oldresources/st/patch/st_embedder_x.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/oldresources/st/patch/st_embedder_x.c b/oldresources/st/patch/st_embedder_x.c
new file mode 100644
index 0000000..c73c389
--- /dev/null
+++ b/oldresources/st/patch/st_embedder_x.c
@@ -0,0 +1,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);
+}