On Thu, Nov 21, 2002 at 05:31:53PM -0500, Eric Gillespie wrote:
>It has always annoyed me that xwd's -frame option does not work
>when a window id is given with -id.  Yes, i know that these are
>separate windows with separate ids, but the id of the actual
>client window is much more easily available than the window
>manager frame's id (for example, easily available to fvwm
>functions via $w).

Hmm, I thought that was already supposed to be fixed:

 331. xwd ignores the -frame option if the -id option is used (#5251,
      Mike Harris).

Did you find that to be incomplete?


David

>
>So i changed the frame_only logic (any way we can change that
>variable name?  It isn't at all accurate...) instead of just
>skipping the find-the-real-client-window step if -frame is given,
>it will actually climb the window tree to find the wm frame.
>
>What do you think?
>
>Index: programs/xwd/xwd.c
>===================================================================
>RCS file: /cvs/xc/programs/xwd/xwd.c,v
>retrieving revision 3.12
>diff -a -u -r3.12 xwd.c
>--- programs/xwd/xwd.c 2002/09/19 00:19:56     3.12
>+++ programs/xwd/xwd.c 2002/11/21 22:19:20
>@@ -203,16 +203,37 @@
>       target_win = Select_Window(dpy);
>     }
>     
>-    if (target_win != None && !frame_only) {
>-        Window root;
>-        int dummyi;
>-        unsigned int dummy;
>+    if (target_win != None) {
>+        if (frame_only) {
>+            Status status;
>+            Window root, parent;
>+            Window *children;
>+            int nchildren;
> 
>-        if (XGetGeometry (dpy, target_win, &root, &dummyi, &dummyi,
>+            for (;;) {
>+                status = XQueryTree(dpy, target_win, &root, &parent,
>+                                    &children, &nchildren);
>+                if (!status)
>+                    break;
>+                if (children)
>+                    XFree(children);
>+
>+                if (!parent || parent == root)
>+                    break;
>+                else
>+                    target_win = parent;
>+            }
>+        } else {
>+            Window root;
>+            int dummyi;
>+            unsigned int dummy;
>+
>+            if (XGetGeometry (dpy, target_win, &root, &dummyi, &dummyi,
>                             &dummy, &dummy, &dummy, &dummy) &&
>-                              target_win != root) {
>-            target_win = XmuClientWindow (dpy, target_win);
>-      }
>+                target_win != root) {
>+                target_win = XmuClientWindow (dpy, target_win);
>+            }
>+        }
>     }
> 
> 
>Index: programs/xwd/xwd.man
>===================================================================
>RCS file: /cvs/xc/programs/xwd/xwd.man,v
>retrieving revision 1.9
>diff -a -u -r1.9 xwd.man
>--- programs/xwd/xwd.man       2002/04/22 20:53:10     1.9
>+++ programs/xwd/xwd.man       2002/11/21 22:19:21
>@@ -77,8 +77,7 @@
> .PP
> .TP 8
> .B "-frame"
>-This option indicates that the window manager frame should be included when
>-manually selecting a window.
>+This option indicates that the window manager frame should be included.
> .PP
> .TP 8
> .B "-root"
>_______________________________________________
>Xpert mailing list
>[EMAIL PROTECTED]
>http://XFree86.Org/mailman/listinfo/xpert

_______________________________________________
Xpert mailing list
[EMAIL PROTECTED]
http://XFree86.Org/mailman/listinfo/xpert

Reply via email to