home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #26 / NN_1992_26.iso / spool / comp / windows / x / 18857 < prev    next >
Encoding:
Internet Message Format  |  1992-11-08  |  2.5 KB

  1. Path: sparky!uunet!zaphod.mps.ohio-state.edu!cs.utexas.edu!sun-barr!ames!olivea!charnel!sifon!thunder.mcrcim.mcgill.edu!mouse
  2. From: mouse@thunder.mcrcim.mcgill.edu (der Mouse)
  3. Newsgroups: comp.windows.x
  4. Subject: Re: Window the pointer is in?
  5. Message-ID: <1992Nov7.103711.19692@thunder.mcrcim.mcgill.edu>
  6. Date: 7 Nov 92 10:37:11 GMT
  7. References: <1d8lhiINN27a@seven-up.East.Sun.COM>
  8. Distribution: na
  9. Organization: McGill Research Centre for Intelligent Machines
  10. Lines: 48
  11.  
  12. In article <1d8lhiINN27a@seven-up.East.Sun.COM>, marc@betelgeuse.East.Sun.COM (Marc St-Hilaire Canadian Dev. Ctr - Montreal) writes:
  13.  
  14. > How could I find the window ID of the topmost window that contains
  15. > the mouse pointer?
  16.  
  17. "topmost" in what sense?
  18.  
  19. > If I do an XQueryPointer(dpy, root_window, ...), the returned child
  20. > window is a window manager window.
  21.  
  22. This is WM-dependent; it'll be true only for reparenting WMs.
  23.  
  24. > However the window that I am looking for is a leaf window of the
  25. > window tree of an X client.
  26.  
  27. Hm.  So "topmost" does not refer to window tree hierarchy.  I assume
  28. what you actually want is the lowest window in the window tree such
  29. that the pointer cursor's hot-spot is within the viewable portion of
  30. the window and that the pixel of the window under the hot-spot is not
  31. obscured by any other window.  (This mouthful is the simplest
  32. descrption I've been able to come up with for what really is a very
  33. simple concept.  If anyone has a simpler, but also precise, way of
  34. saying the same thing, I'd like to hear it.)
  35.  
  36. > Can this be done without having to make recursive calls to
  37. > XQueryTree(), followed by an XGetGeometry() on each child window to
  38. > figure out in which one the mouse pointer is in?
  39.  
  40. Just call XQueryPointer repeatedly, starting with the root, recursing
  41. down the window tree.  Note that there are race conditions; the pointer
  42. must be frozen, and to be fully correct, the server must be grabbed as
  43. well, though if all the windows in question belong to either the window
  44. manager or the client doing the searching, omitting the server grab
  45. would not be unreasonable.
  46.  
  47. If you don't know which screen the pointer is on (and thus which root
  48. window to start the querying with), pick any screen, and if you get it
  49. wrong, the first XQueryPointer will tell you so (and also tell you
  50. which root window you do need to start with).
  51.  
  52. Normally, though, you don't need this, because pointer and keyboard
  53. events carry this information with them.  You may be trying to solve
  54. the wrong problem....
  55.  
  56.                     der Mouse
  57.  
  58.                 mouse@larry.mcrcim.mcgill.edu
  59.