aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2024-02-01 17:11:48 +0300
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2024-02-03 16:09:35 +0300
commit722582c552e5a2c9c37e713a711b31788c28b833 (patch)
tree82ba3467478e9145896c9c724a69e38218518e76
parent1b61390375255529635d627397d3f759357d8613 (diff)
downloadst-fork-722582c552e5a2c9c37e713a711b31788c28b833.tar.gz
Embedder: This respects the embedded window's name/title
Imports gettextprop() from tabbed.c.
-rw-r--r--x.c45
1 files changed, 45 insertions, 0 deletions
diff --git a/x.c b/x.c
index 83ba5f3..6d5f1a7 100644
--- a/x.c
+++ b/x.c
@@ -195,6 +195,8 @@ static int match(uint, uint);
static void createnotify(XEvent *e);
static void destroynotify(XEvent *e);
static void sendxembed(long msg, long detail, long d1, long d2);
+static Bool gettextprop(Window w, Atom atom, char *text, unsigned int size);
+static void updatetitle(Window win);
static void run(void);
static void usage(void);
@@ -529,6 +531,9 @@ propnotify(XEvent *e)
(xpev->atom == XA_PRIMARY ||
xpev->atom == clipboard)) {
selnotify(e);
+ } else if (xpev->state != PropertyDelete && xpev->atom == XA_WM_NAME &&
+ embed == xpev->window) {
+ updatetitle(embed);
}
}
@@ -772,6 +777,8 @@ createnotify(XEvent *e)
XReparentWindow(xw.dpy, embed, xw.win, 0, 0);
XSelectInput(xw.dpy, embed, PropertyChangeMask | StructureNotifyMask | EnterWindowMask);
+ updatetitle(embed);
+
XMapWindow(xw.dpy, embed);
sendxembed(XEMBED_EMBEDDED_NOTIFY, 0, xw.win, 0);
@@ -808,6 +815,44 @@ sendxembed(long msg, long detail, long d1, long d2)
XSendEvent(xw.dpy, embed, False, NoEventMask, &e);
}
+Bool
+gettextprop(Window w, Atom atom, char *text, unsigned int size)
+{
+ char **list = NULL;
+ int n;
+ XTextProperty name;
+
+ if (!text || size == 0)
+ return False;
+
+ text[0] = '\0';
+ XGetTextProperty(xw.dpy, w, &name, atom);
+ if (!name.nitems)
+ return False;
+
+ if (name.encoding == XA_STRING) {
+ strncpy(text, (char *)name.value, size - 1);
+ } else if (XmbTextPropertyToTextList(xw.dpy, &name, &list, &n) >= Success
+ && n > 0 && *list) {
+ strncpy(text, *list, size - 1);
+ XFreeStringList(list);
+ }
+ text[size - 1] = '\0';
+ XFree(name.value);
+
+ return True;
+}
+
+void
+updatetitle(Window win)
+{
+ char name[256];
+
+ if (!gettextprop(win, xw.netwmname, name, sizeof(name)))
+ gettextprop(win, XA_WM_NAME, name, sizeof(name));
+ xsettitle(name);
+}
+
void
xresize(int col, int row)
{