A small twm patch

Alex Goncharov alex-goncharov at comcast.net
Mon Aug 18 08:45:15 PDT 2008

,--- You/Eeri (Mon, 18 Aug 2008 10:08:44 +0200) ----*
| Alex Goncharov:
|   > Based on my long experience with `twm', I would like to suggest
|   > the following small patch to its code.
| Hello Alex,
| being slightly in hurry, nevertheless may I attach some humble comments.

Thanks a lot!

|   > diff -ru twm-1.0.3/src.orig/util.c twm-1.0.3/src/util.c
|   > [...]
|   >      status = XmbTextPropertyToTextList(dpy, &text_prop, &list, &num);
|   > -    if (status < Success || !num || !*list) {
|   > +    if (status < Success || !num || !list || !*list) {
|   >        *winname = NULL;
|   >        return 0;
|   >      }
| Aa a side note, do you have any evidence that injecting '!list' above 
| does anything the '!num'-test already doesn't?  I am in no way ruling 
| out I am overlooking something.

I think I do: I came to this line looking at a SEGV core dump pointing
to this line, with 'list=0'.  (Otherwise, I wouldn't have found it :-)

| The XmbTextPropertyToTextList() documentation states that 'num' in 
| unisono reflects the number of elements in 'list', so if positive and if 
| the same time 'list' is nevertheless zero, we have caught a bug in that 
| function which should be rectified instead.

I wouldn't mind it either.

| It probably is not a good idea to keep disguising this that way.
| (Btw, the exact same if-statement is a dozen lines below in
| I18N_GetIconName().)

That's a good point!  I didn't try to do a real good fix: my purpose
was to find the appropriate people to talk to and try to help identify
and fix the enormously annoying twm crashes, which are unfortunately a
regular thing for me, on top of regular Xorg crashes. (If it happens
once a week, it's plenty for me to try to do something about it).

| Though, nevertheless this if-statement needs correction. The 
| documentation doesn't state anywhere that the set of return values of 
| XmbTextPropertyToTextList() is an ordered set, so 'status < Success' is 
|   not only confusing, it is wrong.

Very well: can "we" do something about it?  "We" means that I am
willing to do what I can, testing and discussing but a truly
X-knowledgeable developer needs to be involved here.

|   > diff -ru twm-1.0.3/src.orig/events.c twm-1.0.3/src/events.c
|   > -	if (Tmp_win->icon_name == NoName) {
|   > +	if (Tmp_win->icon_name !=  Tmp_win->name) {
|   >  	    Tmp_win->icon_name = Tmp_win->name;
|   >  	    RedoIconName();
|   >  	}
| :-)   This looks a very courageous interpretation of the XA_WM_ICON_NAME 
|   window property;

Sure it is -- and I know it's not the best thing to do: I submitted a
problem report to Opera after they released 9.51 this summer and still
didn't set the ICON_NAME property, which I had thought was a 9.2x

| If you ask me, I would suggest to remove this if-statement entirely.  At 
|   least even the traditional variant is arbitrary: if the icon name is 
| missing, the 'class.res_name' or 'class.res_class' seem to be as good 
| candidates for replacing 'NoName' as the 'name' currently is.
| The above if-statement as it originally stands results in icons which 
| stretch from the left to the right edge of a 30" monitor as e.g. often 
| web page generators put the whole document into the HTML-title as well, 
| now ending up rendered in the icon label.

Don't know about this: with the original blocks the icons in my Opera
Icon Manager (yes, I have one in .twmrc) were the size I asked them to
be, with a silly static title.  The changing icon title, matching the
window title, was one of the very few things that I thought Firefox
had advantage over Opera in.  So, I had to modify twm's code to get
the behaviour I wanted.  Not a perfect fix, but made my desktop
environment friendlier.

| Not utilising the XA_WM_ICON_NAME property is maybe 'Opera'-specific 
| peculiarity; maybe Opera is meant never to be iconified.

I haven't heard from Opera in response to my problem report; don't
know why they do it.

| In any case, fortunately the functionality you suggest has not 
| necessarily to be implemented in twm anyways; please find attached a 
| trivial program which, if started in .xinitrc in the background prior 
| to any other X-application, should do you have suggested: intercepts all 
| XA_WM_NAME property calls from each client, and forks them to set their 
| XA_WM_ICON_NAME accordingly.
| Let count this as a counter-suggestion.  :-)

If this works -- and I'll try it later -- that would be a MUCH better
solution than I suggested, a perfect solution, perhaps.  Again, I
mostly wanted to find help in resolving some annoyances.

Thank you very much!

| P.S. Alex, maybe you find it interesting, take a look at
|       http://www1.inf.tu-dresden.de/~ek1/TWM-Tweaked.sh
| this downloads
|       http://www1.inf.tu-dresden.de/~ek1/twm-1.0.4-tweaked-diffs.tar
| and compiles a twm (I mostly added client sloppy focusing; and am nearly 
| finalising the rest by others begun few decades ago).  The man-page is 
| unfortunately not yet updated, so the dot.twmrc file enclosed is the 
| only documentation to these improvements.
| If one keeps the .twmrc as it is, twm will continue running in its
| traditional fashion, though few parameters will result in
|       http://www1.inf.tu-dresden.de/~ek1/Vim-ShapeExtension.png
| Have fun!

I will, thank you.

-- Alex -- alex-goncharov at comcast.net --

 * Before you criticize someone, you should walk a mile in their shoes.
 * That way, when you criticize them, you're a mile away and you have
 * their shoes.

More information about the xorg mailing list