st-flexipatch

My st-flexipatch configuration
git clone git://git.ethandl.dev/st-flexipatch
Log | Files | Refs | README | LICENSE

st_embedder_x.c (1062B)


      1 static Window embed;
      2 
      3 void
      4 createnotify(XEvent *e)
      5 {
      6 	XWindowChanges wc;
      7 
      8 	if (embed || e->xcreatewindow.override_redirect)
      9 		return;
     10 
     11 	embed = e->xcreatewindow.window;
     12 
     13 	XReparentWindow(xw.dpy, embed, xw.win, 0, 0);
     14 	XSelectInput(xw.dpy, embed, PropertyChangeMask | StructureNotifyMask | EnterWindowMask);
     15 
     16 	XMapWindow(xw.dpy, embed);
     17 	sendxembed(XEMBED_EMBEDDED_NOTIFY, 0, xw.win, 0);
     18 
     19 	wc.width = win.w;
     20 	wc.height = win.h;
     21 	XConfigureWindow(xw.dpy, embed, CWWidth | CWHeight, &wc);
     22 
     23 	XSetInputFocus(xw.dpy, embed, RevertToParent, CurrentTime);
     24 }
     25 
     26 void
     27 destroynotify(XEvent *e)
     28 {
     29 	visibility(e);
     30 	if (embed == e->xdestroywindow.window) {
     31 		focus(e);
     32 	}
     33 }
     34 
     35 void
     36 sendxembed(long msg, long detail, long d1, long d2)
     37 {
     38 	XEvent e = { 0 };
     39 
     40 	e.xclient.window = embed;
     41 	e.xclient.type = ClientMessage;
     42 	e.xclient.message_type = xw.xembed;
     43 	e.xclient.format = 32;
     44 	e.xclient.data.l[0] = CurrentTime;
     45 	e.xclient.data.l[1] = msg;
     46 	e.xclient.data.l[2] = detail;
     47 	e.xclient.data.l[3] = d1;
     48 	e.xclient.data.l[4] = d2;
     49 	XSendEvent(xw.dpy, embed, False, NoEventMask, &e);
     50 }