我正在嘗試編寫一個簡單的程序,用一個特定的窗口ID來更改窗口的名稱( )。XChangeProperty在客戶端退出後無效
/* See LICENSE file for copyright and license details. */
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <X11/Xlib.h>
static void usage(char *);
static void set_title(Display* d, Window w, char* name);
static void
usage(char *name)
{
fprintf(stderr, "usage: %s <name> <wid>\n", name);
exit(1);
}
static void
set_title(Display* d, Window w, char* name)
{
XEvent e;
XSync(d, False);
int ret=XChangeProperty(d, w,
XInternAtom(d, "WM_NAME", False),
XInternAtom(d, "STRING", False), 8,
PropModeReplace, (unsigned char*)name, strlen(name)+1);
if(ret==0)
return;
ret=XChangeProperty(d, w,
XInternAtom(d, "_NET_WM_NAME", False),
XInternAtom(d, "STRING", False), 8,
PropModeReplace, (unsigned char*)name, strlen(name)+1);
}
int
main(int argc, char **argv)
{
Display* d;
char* name=argv[1];
if (argc != 3)
usage(argv[0]);
d=XOpenDisplay(NULL);
set_title(d, strtoul(argv[2], NULL, 16), name);
XFlush(d);
XCloseDisplay(d);
return 0;
}
這工作正常,在調試器,但是,在程序完成後,該窗口名稱不堅持(使用wname從wmutils(http://wmutils.io))。
當我可以退出之前更改屬性時,是否必須顯式等待XEvent?我能做些什麼來永久更改窗口屬性?
爲我工作,你想修改什麼窗口? –
我在終端窗口上試過了(使用st(st.suckless.org))。它似乎與其他窗口一起工作,但不與st。 – pranomostro
您的終端可能會在每次啓動或完成運行命令時設置其標題。 –