बाहर निकलने के बाद मैं एक साधारण प्रोग्राम लिखने की कोशिश कर रहा हूं जो एक निश्चित विंडो आईडी के साथ विंडो का नाम बदलता है।क्लाइंट के बाहर 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 की स्पष्ट रूप से प्रतीक्षा करनी है? खिड़की की संपत्ति को स्थायी रूप से बदलने के लिए मैं क्या कर सकता हूं?
मेरे लिए काम करता है, आप किस विंडो को संशोधित करने की कोशिश कर रहे हैं? –
मैंने इसे अपनी टर्मिनल विंडो पर कोशिश की (सेंट (st.suckless.org) का उपयोग करके)। ऐसा लगता है कि यह अन्य खिड़कियों के साथ काम करता है, लेकिन सेंट के साथ नहीं। – pranomostro
आपका टर्मिनल प्रत्येक बार जब यह शुरू होता है या कमांड चलाता है तो उसका शीर्षक सेट करता है। –