2016-09-26 8 views
7

बाहर निकलने के बाद मैं एक साधारण प्रोग्राम लिखने की कोशिश कर रहा हूं जो एक निश्चित विंडो आईडी के साथ विंडो का नाम बदलता है।क्लाइंट के बाहर 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 की स्पष्ट रूप से प्रतीक्षा करनी है? खिड़की की संपत्ति को स्थायी रूप से बदलने के लिए मैं क्या कर सकता हूं?

+2

मेरे लिए काम करता है, आप किस विंडो को संशोधित करने की कोशिश कर रहे हैं? –

+0

मैंने इसे अपनी टर्मिनल विंडो पर कोशिश की (सेंट (st.suckless.org) का उपयोग करके)। ऐसा लगता है कि यह अन्य खिड़कियों के साथ काम करता है, लेकिन सेंट के साथ नहीं। – pranomostro

+0

आपका टर्मिनल प्रत्येक बार जब यह शुरू होता है या कमांड चलाता है तो उसका शीर्षक सेट करता है। –

उत्तर

2

मैं इस पुन: पेश करने में सक्षम नहीं हूँ। मैंने इसे "एक्सफबर्न" एप्लिकेशन के साथ करने की कोशिश की। कृपया इस सत्र को देखते हैं और मुझे पता है कि अगर मैं (xchangeproperty.c अपने कोड है) कुछ भी गलत समझा किए हैं:

$ gcc -g -O0 -o xchangeproperty xchangeproperty.c -lX11 
$ xwininfo -name Xfburn | grep "Window id" 
xwininfo: Window id: 0x4600003 "Xfburn" 
$ ./wname 0x4600003 
Xfburn 
$ ./xchangeproperty pranomostro 0x4600003 
$ echo $? 
0 
$ ./wname 0x4600003 
pranomostro 

मैं भी खिड़की परिवर्तन पर शीर्षक देख सकते हैं। यह XUbuntu 16.04 पर जीसीसी के साथ परीक्षण किया गया है:

$ gcc --version 
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.2) 5.4.0 20160609 
+0

यह मेरी टर्मिनल विंडो पर काम नहीं करता है, और मैंने एक परीक्षण विंडो के रूप में पीएफडब्ल्यू (प्रिंट फोकस विंडो) का उपयोग किया, जो मेरा टर्मिनल था। हालांकि, यह अन्य कार्यक्रमों पर काम करता है। – pranomostro

संबंधित मुद्दे