XSetWMName fails to set the window title

Glynn Clements glynn at gclements.plus.com
Wed Jun 13 07:50:04 PDT 2007

Jon Kristensen wrote:

> tis 2007-06-12 klockan 16:33 +0100 skrev Glynn Clements: 
> > Jon Kristensen wrote:
> > 
> > > I have a little problem using the X11 library, and I thought there might
> > > be someone on this list that wanted to help me out a bit. If this mail
> > > is off-topic or something, then I'm sorry.
> > > 
> > > I want to set the window title, and below follows how I try to do it. I
> > > know that the window handle unsigned long is correct, becuase I've
> > > converted the number to hex and compared it to the output of `xwininfo'.
> > > 
> > > I get no errors, the window title just doesn't get set.
> > > 
> > > Any help would be greatly appreciated! :o)
> > 
> > > // Code for GNU systems goes here. We open the X11 display.
> > > static Display *display = XOpenDisplay (NULL);
> > 
> > You should use the Display* which is associated with the window. A
> > different Display* (even if it happens to refer to the same X server)
> > may not work, as the X server will see two different clients: one owns
> > the window, the other is calling XSetWMName(). The fact that both
> > connections belong to the same process doesn't count (X may not even
> > be aware of this, particularly if TCP connections are used).
> > 
> > Although I'm not certain that this is the cause of your problem, it
> > could be, and I don't see anything else wrong with the code.
> Thank you so very much for your reply, I've been trying to solve it on
> my own but havn't succeded! It means a lot!
> I have two questions:
> 1) How do I get the Display* that is associated with the window, like
> you describe?

That depends upon the toolkit which you're using. I note that you get
the Window with:

        this->window->getCustomAttribute("WINDOW", &windowHandle);

Maybe there's something similar for the Display*? Or maybe it's a
global variable.

Also, something I overlooked last time: are you sure that you're using
the correct window (i.e. the top-level window which the application
created, not the WM's frame)? Use "xprop -id ..." to list the
properties; if it's the correct window, it should have the various
WM_* properties.

> 2) If this isn't the problem, how would you go about isolating the
> problem? XSetWMName() returns void so I can't check for info there. I
> call XSetWMName 15 times and tried recording the X events using Xnee*
> but since I only got event ids and other numbers, it didn't give me very
> much. The output from Xnee follows.
> (Note that request range 18-20 covers X_ChangeProperty, X_DeleteProperty
> and X_GetProperty.)

I haven't used Xnee, but maybe this option helps:

	# Human printout of X11 data (instead of Xnee format)
	# human-printout  

Failing that, try using xmon.

Glynn Clements <glynn at gclements.plus.com>

More information about the xorg mailing list