특정 창 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;
}
이 프로그램이 끝난 후 그러나, 윈도우 이름 (wmutils (http://wmutils.io)에서 wname 사용) 유지되지 않습니다, 디버거에서 잘 작동합니다.
종료하기 전에 속성을 변경할 때 명시 적으로 XEvent를 기다려야합니까? 창 속성을 영구적으로 변경하려면 어떻게해야합니까?
으로 XUbuntu 16.04에서 테스트되었습니다. 어떤 창을 수정하려고합니까? –
터미널 창에서 시도했습니다 (st (st.suckless.org) 사용). 다른 윈도우에서는 작동하지만 st에서는 작동하지 않는 것 같습니다. – pranomostro
터미널은 명령을 시작하거나 명령을 실행할 때마다 제목을 설정합니다. –