From: Richard Levitte via RT (ctwm-bugs@free.lp.se)
Date: Fri Feb 28 2003 - 17:34:53 CET
I didn't aooky this patch as is, but made a change along the same line. The main difference is that I didn't want to use rand(). Instead, as long as 'available' is less than 100 for each coordinate, I set that coordinate to half of 'available', and if 'available' is larger than that, I set the corrdinate to 50.
This ticket is now resolved.
> More info about this patch: http://www.cis.upenn.edu/~bjornk/ctwm/
>
> To apply this patch:
>
> 1) cd to your CTWM source directory and
> 2) Run 'patch -l -p3 < path_to_this_file'
> 3) Run 'make install'
>
> Random placement and DontMoveOff patch:
> ---------------------------------------
> I've often been annoyed that randomly placed windows will be placed
> off-screen. I've specified DontMoveOff, so I think I've made my
> preference clear on this point.
>
> The below patch will keep the old behavior if you have not specified
> DontMoveOff, or if the currently active random placement would put the
> window entirely in the current screen. If, on the other hand, the
> current random placement would place the window (partially) outside of
> the current screen, and DontMoveOff is specified, the placement will
> be re-calculated to put the window inside the screen, or if it's too
> big, aligned with the top of the screen.
>
> -------------------
> Bjorn Knutsson http://www.cis.upenn.edu/~bjornk/
>
> Patch against CTWM 3.6:
>
> diff -rwc /tmp/ctwm-3.6-orig/add_window.c /tmp/ctwm-3.6/add_window.c
> *** /tmp/ctwm-3.6-orig/add_window.c 2001-12-11 10:38:52.000000000
> -0500
> --- /tmp/ctwm-3.6/add_window.c 2003-02-09 18:54:46.000000000 -0500
> ***************
> *** 610,619 ****
> ((Scr->RandomPlacement == RP_UNMAPPED) &&
> ((tmp_win->wmhints && (tmp_win->wmhints->initial_state ==
> IconicState)) ||
> (! OCCUPY (tmp_win, Scr->workSpaceMgr.activeWSPC))))) { /* just
> stick it somewhere */
> ! if ((PlaceX + tmp_win->attr.width) > Scr->MyDisplayWidth)
> ! PlaceX = 50;
> ! if ((PlaceY + tmp_win->attr.height) > Scr->MyDisplayHeight)
> ! PlaceY = 50;
>
> tmp_win->attr.x = PlaceX;
> tmp_win->attr.y = PlaceY;
> --- 610,637 ----
> ((Scr->RandomPlacement == RP_UNMAPPED) &&
> ((tmp_win->wmhints && (tmp_win->wmhints->initial_state ==
> IconicState)) ||
> (! OCCUPY (tmp_win, Scr->workSpaceMgr.activeWSPC))))) { /* just
> stick it somewhere */
> ! if ((PlaceX + tmp_win->attr.width) > Scr->MyDisplayWidth) {
> ! if (!Scr->DontMoveOff) { /* Honor the user's wishes */
> ! PlaceX = 50; /* Anything goes... */
> ! } else {
> ! int available = Scr->MyDisplayWidth - tmp_win->attr.width; /*
> Available room */
> ! if (available <= 0) /* Larger than the screen */
> ! PlaceX = 0; /* Just stick it at the top */
> ! else
> ! PlaceX = rand() % available; /* Anywhere's good... */
> ! }
> ! }
> ! if ((PlaceY + tmp_win->attr.height) > Scr->MyDisplayHeight) {
> ! if (!Scr->DontMoveOff) { /* Honor the user's wishes */
> ! PlaceY = 50; /* Anything goes... */
> ! } else {
> ! int available = Scr->MyDisplayHeight - tmp_win->attr.height; /*
> Available room */
> ! if (available <= 0) /* Larger than the screen */
> ! PlaceY = 0; /* Just stick it at the top */
> ! else
> ! PlaceY = rand() % available; /* Anywhere's good... */
> ! }
> ! }
>
> tmp_win->attr.x = PlaceX;
> tmp_win->attr.y = PlaceY;
This archive was generated by hypermail 2.1.4 : Sat Mar 01 2003 - 06:45:04 CET