On Mon, Mar 16, 2009 at 01:14:20AM +0000, Thomas Adam wrote:
> 2009/3/15 Jason Weber <baboon.im...@gmail.com>:
> > Start with one empty unified screen, two side by side monitors using
> > twinview (same card, different plugs).
> >
> > Instance a new window, say a xterm.
> >
> > Slide it left and right so that the left or right edge passes from
> > one monitor to the other.  I believe that the window edge is supposed to
> > snap with strong preference to keep the window on only one monitor.
> >
> > The only thing I know of that might be unusual is that my
> > monitors' horizontal resolutions are different.
> 
> Well as long as X reports things correctly then FVWM will honour that,
> so I think this a red-herring.  I'm not in a position to test this
> myself as I am sans Xinerama,
You can test Xinerama if you configure fvwm with
--enable-xinerame-emulation.


> but does the following patch do anything
> to help "fix" this?  I warn you it's complete theory on my part, so
> expect a quirk or fifty.  ;)
> 
> -- Thomas Adam
> 
> P.S.  Also Cc'ed fvwm-workers which is what you should have done from
> the outset.

> Index: fvwm/move_resize.c
> ===================================================================
> RCS file: /home/cvs/fvwm/fvwm/fvwm/move_resize.c,v
> retrieving revision 1.304
> diff -u -r1.304 move_resize.c
> --- fvwm/move_resize.c        7 Dec 2007 18:52:21 -0000       1.304
> +++ fvwm/move_resize.c        16 Mar 2009 01:11:21 -0000
> @@ -2076,8 +2076,23 @@
>       /* snap to screen egdes */
>       if ((fw->snap_mode & SNAP_SCREEN) && fw->snap_proximity > 0)
>       {
> +             /* TA:  20090315:  Make sure windows being told to snap to a
> +              * screen; honour Xinerama screens separately -- and don't
> +              * treat the screen area as one huge screen.
> +              */
> +             rectangle screen;
> +             int screen_width;
> +
> +             screen_width = Scr.MyDisplayWidth;
> +
> +             /* Get the parameters for the screen */
> +             FScreenGetScrRect(NULL, FSCREEN_CURRENT, &screen.x, &screen.y, 
> +                             &screen.width, &screen.height);
> +             if (screen.width > 0)
> +                     screen_width = screen.width;
> +
>               /* horizontally */
> -             if (!(Scr.MyDisplayWidth < (*px) ||
> +             if (!(screen_width < (*px) ||
>                     (*px + self.width) < 0))
>               {
>                       dist = abs(Scr.MyDisplayHeight - (*py + self.height));
> @@ -2119,23 +2134,23 @@
>                     (*py + self.height) < 0))
>               {
>                       dist = abs(
> -                             Scr.MyDisplayWidth - (*px + self.width));
> +                             screen_width - (*px + self.width));
>                       if (dist < closestRight)
>                       {
>                               closestRight = dist;
>  
> -                             if (*px + self.width >= Scr.MyDisplayWidth &&
> +                             if (*px + self.width >= screen_width &&
>                                   *px + self.width <
> -                                 Scr.MyDisplayWidth + fw->snap_proximity)
> +                                 screen_width + fw->snap_proximity)
>                               {
> -                                     nxl = Scr.MyDisplayWidth - self.width;
> +                                     nxl = screen_width - self.width;
>                               }
>  
>                               if (*px + self.width >=
> -                                 Scr.MyDisplayWidth - fw->snap_proximity &&
> -                                 *px + self.width < Scr.MyDisplayWidth)
> +                                 screen_width - fw->snap_proximity &&
> +                                 *px + self.width < screen_width)
>                               {
> -                                     nxl = Scr.MyDisplayWidth - self.width;
> +                                     nxl = screen_width - self.width;
>                               }
>                       }
>                       dist = abs(*px);



Ciao

Dominik ^_^  ^_^

-- 

Dominik Vogt

Reply via email to