home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / sys / sun / apps / 1871 < prev    next >
Encoding:
Text File  |  1992-09-09  |  4.1 KB  |  121 lines

  1. Xref: sparky comp.sys.sun.apps:1871 comp.windows.x:16438
  2. Path: sparky!uunet!dtix!mimsy!nmrdc1!frmug!news.alcatel-alsthom.fr!archer
  3. From: archer@frmug.fr.mugnet.org (Vincent Archer)
  4. Newsgroups: comp.sys.sun.apps,comp.windows.x
  5. Subject: Awful behaviour of SynergyII
  6. Keywords: sunos4.1.2 ow2.0 sparc2
  7. Message-ID: <1992Sep9.113612.6806@tcvr65.alcatel-alsthom.fr>
  8. Date: 9 Sep 92 11:36:12 GMT
  9. Sender: archer@tcvr65.alcatel-alsthom.fr (Vincent Archer)
  10. Followup-To: comp.sys.sun.apps
  11. Organization: Alcatel CIT - ATC
  12. Lines: 107
  13.  
  14. [Note the followup to comp.sys.sun.apps. Please make sure this group is
  15.  included in all replies to this message]
  16.  
  17. I'm working on an application that use Synergy, a 386 card, to emulate a PC
  18. on a Sparc2. One major problem, when starting the application, is that the
  19. screen is displayed roughly in the middle of the screen. However, when the
  20. "PC" goes into Super-VGA mode for Windows3, the window grows to the left
  21. and the bottom, thus falling outside of the limits of the Sparc2 screen.
  22.  
  23. "No problem there!", I said, I'll just relocate the initial screen to the
  24. top left corner, and there will be no hidden parts.
  25.  
  26. Then came the bad things:
  27.  
  28. * I tried to use XView's option -Wp to set up the 10/30 position of the
  29.   window. Not so fast, my friend... Neither the starting window nor the
  30.   emulation window obey the command switch.
  31. * I then tried to set my .Xdefaults resource file to specify
  32.   Synergy.Windows.X and .Y values. Guess what... The app still uses its
  33.   own run-time computed positions to center the window on the screen.
  34. * I therefore dug into XLib manuals, and wrote a small program that
  35.   searches for the Synergy window, and calls XReconfigureWMWindow (or
  36.   XMoveWindow, I've tried both) when the window is created and becomes
  37.   mapped (the source is included below).
  38.  
  39. Now comes the bad part. This program (test on shelltools/cmdtools and
  40. other standard windows) failed to do the correct thing:
  41.  
  42. - Used before the window is mapped (no code to wait for window map), the
  43.   window still appears at its old place.
  44. - Used once the window is on the screen, no movement takes place...
  45. And now the winner is...
  46. - Used once the window is on the screen, but with any other window, no
  47.   matter how small or whether iconified or not, is above and overlaps
  48.   part of the Synergy window, the window correctly jumps to its intended
  49.   place!!!
  50.  
  51. The standard Sun apps, of course, do not manifest this behaviour; they
  52. appily jump to the requested location on screen.
  53.  
  54. So, does anybody has any insight on how this is possible, why it is so,
  55. and how I could circumvent the problem (other than the easy solution,
  56. create a window on top, relocate the synergy screen, destroy the window).
  57.  
  58. I'm specially most interested in knowing why this simple task can fail;
  59. what arcane and undocumented (at least in the XReconfigureWMWindow man
  60. page) feature blocks any of my attemps to do relocate.
  61.  
  62. Of course, If somebody has an easier way of opening SynergyII at a fixed
  63. place on the screen without using the program below, I'd be even happier
  64. :-)
  65.  
  66. -- Begin included source --
  67. #include <X11/Xlib.h>
  68.  
  69. Display *colon_0_dot_0;
  70.  
  71. recurse(w)
  72. Window w;
  73. {
  74. Window trash;
  75. Window *wlist;
  76. unsigned int wsize;
  77. Window *l;
  78. char *name;
  79. XWindowAttributes attrs;
  80. XWindowChanges changes;
  81. int s;
  82.  
  83.   XFetchName(colon_0_dot_0, w, &name);
  84.   if (name) {
  85.     if (strcmp(name, "  Synergy II") == 0) {
  86.         printf("Window 0x%08x for SynergyII found\n", w);
  87.         attrs.map_state = IsUnmapped;
  88.         while (attrs.map_state != IsViewable) {
  89.             sleep(1);
  90.             XGetWindowAttributes(colon_0_dot_0, w, &attrs);
  91.         }
  92.         changes.x = 10;
  93.         changes.y = 30;
  94.         XReconfigureWMWindow(colon_0_dot_0, w, 0, CWX|CWY, &changes);
  95.         /*XMoveWindow(colon_0_dot_0, w, 10, 30); Doesn't work either*/
  96.         XFree(name);
  97.         return 1;
  98.     }
  99.     XFree(name);
  100.   }
  101.   XQueryTree(colon_0_dot_0, w, &trash, &trash, &wlist, &wsize);
  102.   s = 0;
  103.   for (l=wlist; wsize; wsize--)
  104.     s |= recurse(*l++);
  105.   XFree(wlist);
  106.   return s;
  107. }
  108.  
  109.  
  110. main()
  111. {
  112.   colon_0_dot_0 = XOpenDisplay(":0.0");
  113.   while (!recurse(RootWindow(colon_0_dot_0, 0)))
  114.     sleep(1);
  115. }
  116. -- End included source --
  117.  
  118. --
  119. Vincent Archer            Email:    archer@frmug.fr.mugnet.org
  120. Minix User Group France
  121.